[tbb] 11/64: Imported Upstream version 2.1r015
Graham Inggs
ginggs at moszumanska.debian.org
Mon Jul 3 12:27:38 UTC 2017
This is an automated email from the git hooks/post-receive script.
ginggs pushed a commit to branch master
in repository tbb.
commit 0e23298f5b49544739b11f14e3c17b8a3878a9d7
Author: Graham Inggs <ginggs at debian.org>
Date: Mon Jul 3 14:13:28 2017 +0200
Imported Upstream version 2.1r015
---
CHANGES | 220 +++-
Makefile | 2 +-
build/FreeBSD.gcc.inc | 4 +-
build/FreeBSD.inc | 4 +-
build/Makefile.tbb | 3 +-
build/Makefile.tbbmalloc | 59 +-
build/Makefile.test | 122 +-
build/SunOS.gcc.inc | 14 +-
build/SunOS.inc | 20 +-
build/SunOS.suncc.inc | 16 +-
build/common.inc | 6 +-
build/common_rules.inc | 21 +-
build/detect.js | 2 +-
build/generate_tbbvars.bat | 12 +-
build/generate_tbbvars.sh | 12 +-
build/index.html | 2 +-
build/linux.gcc.inc | 10 +-
build/linux.icc.inc | 4 +-
build/linux.inc | 20 +-
build/macos.gcc.inc | 16 +-
build/macos.icc.inc | 4 +-
build/macos.inc | 4 +-
build/test_launcher.sh | 2 +-
build/version_info_linux.sh | 11 +-
build/version_info_macos.sh | 6 +-
build/version_info_sunos.sh | 4 +-
build/version_info_windows.js | 2 +-
build/windows.cl.inc | 20 +-
build/windows.icl.inc | 9 +-
build/windows.inc | 16 +-
doc/Release_Notes.txt | 20 +-
doc/html/a00001.html | 10 +-
doc/html/a00013.html | 30 -
doc/html/a00014.html | 26 -
doc/html/a00015.html | 30 +-
doc/html/a00016.html | 32 +-
doc/html/{a00015.html => a00017.html} | 28 +-
doc/html/a00018.html | 26 +-
doc/html/a00020.html | 16 +-
doc/html/a00022.html | 31 +-
doc/html/a00023.html | 32 -
doc/html/a00024.html | 77 +-
doc/html/a00025.html | 29 +-
doc/html/a00026.html | 15 +-
doc/html/{a00024.html => a00027.html} | 122 +-
doc/html/{a00025.html => a00028.html} | 24 +-
doc/html/{a00026.html => a00029.html} | 20 +-
doc/html/a00030.html | 38 -
doc/html/a00031.html | 19 -
doc/html/a00033.html | 43 +-
doc/html/a00034.html | 46 +-
doc/html/{a00032.html => a00035.html} | 24 +-
doc/html/a00036.html | 53 +-
doc/html/a00037.html | 58 +
doc/html/a00038.html | 19 -
doc/html/a00039.html | 61 +-
doc/html/a00041.html | 95 +-
doc/html/{a00039.html => a00042.html} | 55 +-
doc/html/a00044.html | 101 +-
doc/html/{a00095.html => a00047.html} | 17 +-
doc/html/{a00045.html => a00048.html} | 20 +-
doc/html/{a00046.html => a00053.html} | 8 +-
doc/html/a00054.html | 20 -
doc/html/a00055.html | 18 -
doc/html/a00056.html | 63 -
doc/html/a00058.html | 21 -
doc/html/a00059.html | 63 -
doc/html/a00061.html | 55 +-
doc/html/a00062.html | 52 +-
doc/html/a00063.html | 102 +-
doc/html/a00064.html | 63 -
doc/html/a00065.html | 59 +-
doc/html/a00066.html | 102 +-
doc/html/a00068.html | 57 +-
doc/html/a00069.html | 105 +-
doc/html/a00070.html | 106 +-
doc/html/a00071.html | 107 +-
doc/html/a00072.html | 104 +-
doc/html/a00073.html | 65 +-
doc/html/a00074.html | 13 +-
doc/html/a00075.html | 54 +-
doc/html/a00076.html | 53 +-
doc/html/a00077.html | 105 +-
doc/html/a00078.html | 66 +-
doc/html/a00079.html | 62 +-
doc/html/a00080.html | 63 +-
doc/html/a00081.html | 19 +-
doc/html/a00082.html | 20 +
doc/html/a00083.html | 11 +-
doc/html/a00084.html | 68 ++
doc/html/a00085.html | 62 +-
doc/html/a00086.html | 67 ++
doc/html/a00087.html | 22 +-
doc/html/a00088.html | 16 +-
doc/html/a00089.html | 16 +-
doc/html/a00090.html | 17 +-
doc/html/a00092.html | 19 +-
doc/html/a00094.html | 19 +-
doc/html/a00096.html | 28 +-
doc/html/a00097.html | 18 +-
doc/html/a00098.html | 21 +-
doc/html/{a00090.html => a00099.html} | 20 +-
doc/html/{a00091.html => a00100.html} | 19 +-
doc/html/{a00092.html => a00101.html} | 24 +-
doc/html/{a00093.html => a00102.html} | 18 +-
doc/html/{a00094.html => a00103.html} | 20 +-
doc/html/a00104.html | 30 +-
doc/html/a00105.html | 65 -
doc/html/a00106.html | 54 +-
doc/html/a00108.html | 21 +-
doc/html/{a00096.html => a00109.html} | 20 +-
doc/html/a00110.html | 32 +-
doc/html/{a00098.html => a00111.html} | 24 +-
doc/html/a00114.html | 19 -
doc/html/{a00104.html => a00119.html} | 20 +-
doc/html/a00120.html | 29 +
doc/html/a00122.html | 59 +-
doc/html/a00123.html | 66 +
doc/html/{a00107.html => a00124.html} | 22 +-
doc/html/{a00108.html => a00125.html} | 25 +-
doc/html/{a00110.html => a00127.html} | 48 +-
doc/html/a00128.html | 31 -
doc/html/{a00112.html => a00129.html} | 12 +-
doc/html/a00131.html | 17 +-
doc/html/a00132.html | 22 +
doc/html/a00133.html | 26 +
doc/html/a00134.html | 29 +
doc/html/{a00115.html => a00135.html} | 14 +-
doc/html/{a00001.html => a00142.html} | 9 +-
doc/html/{a00067.html => a00144.html} | 8 +-
doc/html/{a00122.html => a00145.html} | 9 +-
doc/html/{a00126.html => a00149.html} | 14 +-
doc/html/a00151.html | 33 +
doc/html/{a00130.html => a00153.html} | 12 +-
doc/html/{a00131.html => a00154.html} | 24 +-
doc/html/a00162.html | 44 -
doc/html/a00163.html | 42 -
doc/html/a00164.html | 43 -
doc/html/a00166.html | 42 -
doc/html/a00169.html | 257 ----
doc/html/a00170.html | 69 --
doc/html/a00171.html | 76 --
doc/html/a00174.html | 649 ----------
doc/html/a00175.html | 49 -
doc/html/a00176.html | 72 --
doc/html/a00177.html | 328 -----
doc/html/a00178.html | 138 ---
doc/html/a00180.html | 95 --
doc/html/a00181.html | 70 --
doc/html/a00182.html | 423 -------
doc/html/a00183.html | 156 ---
doc/html/a00184.html | 36 -
doc/html/a00186.html | 43 -
doc/html/a00187.html | 43 -
doc/html/a00188.html | 31 +-
doc/html/a00189.html | 116 +-
doc/html/a00190.html | 37 +-
doc/html/a00191.html | 40 +-
doc/html/a00192.html | 39 +-
doc/html/a00193.html | 37 +-
doc/html/a00194.html | 39 +-
doc/html/a00195.html | 257 +++-
doc/html/a00196.html | 99 +-
doc/html/a00197.html | 94 +-
doc/html/a00198.html | 84 +-
doc/html/a00199.html | 80 +-
doc/html/a00200.html | 143 ++-
doc/html/a00201.html | 643 +++++++++-
doc/html/a00202.html | 45 +-
doc/html/a00203.html | 68 +-
doc/html/a00204.html | 304 ++++-
doc/html/a00205.html | 135 ++-
doc/html/a00206.html | 52 +-
doc/html/a00207.html | 93 +-
doc/html/a00208.html | 64 +-
doc/html/a00209.html | 422 ++++++-
doc/html/a00210.html | 152 ++-
doc/html/a00211.html | 154 +--
doc/html/a00212.html | 36 +-
doc/html/a00213.html | 59 +-
doc/html/a00214.html | 45 +-
doc/html/a00215.html | 75 +-
doc/html/a00216.html | 192 ++-
doc/html/a00217.html | 73 +-
doc/html/a00218.html | 52 +-
doc/html/a00219.html | 41 +-
doc/html/a00220.html | 155 +--
doc/html/a00221.html | 42 +-
doc/html/a00222.html | 53 +-
doc/html/a00223.html | 75 +-
doc/html/a00224.html | 80 +-
doc/html/a00225.html | 48 +-
doc/html/a00226.html | 173 ++-
doc/html/a00227.html | 52 +-
doc/html/a00228.html | 679 +----------
doc/html/a00229.html | 50 +-
doc/html/a00230.html | 47 +-
doc/html/a00231.html | 162 +--
doc/html/a00232.html | 96 +-
doc/html/a00233.html | 38 +-
doc/html/a00234.html | 171 ++-
doc/html/a00235.html | 45 +-
doc/html/a00236.html | 82 +-
doc/html/a00237.html | 60 +-
doc/html/a00238.html | 111 +-
doc/html/a00239.html | 106 +-
doc/html/a00240.html | 52 +-
doc/html/a00241.html | 156 ++-
doc/html/a00242.html | 36 +-
doc/html/a00243.html | 44 +
doc/html/{a00213.html => a00244.html} | 24 +-
doc/html/{a00214.html => a00245.html} | 14 +-
doc/html/{a00215.html => a00246.html} | 30 +-
doc/html/{a00172.html => a00247.html} | 70 +-
doc/html/{a00233.html => a00248.html} | 22 +-
doc/html/{a00167.html => a00249.html} | 28 +-
doc/html/{a00217.html => a00250.html} | 17 +-
doc/html/{a00218.html => a00251.html} | 26 +-
doc/html/{a00219.html => a00252.html} | 16 +-
doc/html/{a00220.html => a00253.html} | 30 +-
doc/html/{a00168.html => a00254.html} | 25 +-
doc/html/{a00222.html => a00255.html} | 17 +-
doc/html/{a00223.html => a00256.html} | 20 +-
doc/html/{a00224.html => a00257.html} | 23 +-
doc/html/{a00225.html => a00258.html} | 18 +-
doc/html/{a00226.html => a00259.html} | 10 +-
doc/html/{a00227.html => a00260.html} | 18 +-
doc/html/{a00228.html => a00261.html} | 198 +--
doc/html/a00262.html | 190 +++
doc/html/{a00229.html => a00263.html} | 24 +-
doc/html/{a00230.html => a00264.html} | 14 +-
doc/html/{a00231.html => a00265.html} | 44 +-
doc/html/{a00232.html => a00266.html} | 36 +-
doc/html/{a00173.html => a00267.html} | 22 +-
doc/html/a00268.html | 148 +++
doc/html/{a00179.html => a00269.html} | 29 +-
doc/html/{a00234.html => a00270.html} | 48 +-
doc/html/{a00235.html => a00271.html} | 12 +-
doc/html/{a00236.html => a00272.html} | 16 +-
doc/html/{a00237.html => a00273.html} | 28 +-
doc/html/{a00238.html => a00274.html} | 71 +-
doc/html/{a00165.html => a00275.html} | 20 +-
doc/html/{a00185.html => a00276.html} | 26 +-
doc/html/{a00241.html => a00277.html} | 14 +-
doc/html/a00278.html | 383 +-----
doc/html/a00279.html | 662 +---------
doc/html/a00289.html | 888 --------------
doc/html/a00290.html | 327 -----
doc/html/a00291.html | 787 ------------
doc/html/a00293.html | 409 -------
doc/html/a00295.html | 318 -----
doc/html/a00297.html | 147 ---
doc/html/a00300.html | 154 ---
doc/html/a00301.html | 102 --
doc/html/a00302.html | 149 ---
doc/html/a00304.html | 461 +++++--
doc/html/a00305.html | 131 --
doc/html/a00306.html | 172 ---
doc/html/a00315.html | 151 ---
doc/html/a00318.html | 585 +++++++++
doc/html/{a00279.html => a00319.html} | 562 +++++----
doc/html/{a00281.html => a00321.html} | 297 +++--
doc/html/{a00282.html => a00322.html} | 18 +-
doc/html/{a00283.html => a00323.html} | 14 +-
doc/html/{a00284.html => a00324.html} | 366 +++---
doc/html/{a00285.html => a00325.html} | 38 +-
doc/html/{a00286.html => a00326.html} | 36 +-
doc/html/{a00287.html => a00327.html} | 48 +-
doc/html/{a00288.html => a00328.html} | 152 +--
doc/html/a00329.html | 931 +++++++++++++++
doc/html/a00330.html | 350 ++++++
doc/html/a00331.html | 815 +++++++++++++
doc/html/{a00292.html => a00332.html} | 80 +-
doc/html/{a00283.html => a00333.html} | 61 +-
doc/html/{a00283.html => a00334.html} | 63 +-
doc/html/a00335.html | 468 ++++++++
doc/html/{a00294.html => a00336.html} | 54 +-
doc/html/a00337.html | 424 +++++++
doc/html/{a00296.html => a00338.html} | 170 +--
doc/html/a00339.html | 211 ++++
doc/html/{a00298.html => a00340.html} | 74 +-
doc/html/{a00299.html => a00341.html} | 112 +-
doc/html/a00342.html | 181 +++
doc/html/a00343.html | 110 ++
doc/html/a00344.html | 142 +++
doc/html/{a00303.html => a00345.html} | 80 +-
doc/html/a00346.html | 171 +++
doc/html/a00347.html | 140 +++
doc/html/a00348.html | 181 +++
doc/html/{a00307.html => a00349.html} | 278 ++---
doc/html/{a00308.html => a00350.html} | 40 +-
doc/html/{a00309.html => a00351.html} | 12 +-
doc/html/{a00310.html => a00352.html} | 164 +--
doc/html/{a00311.html => a00353.html} | 100 +-
doc/html/{a00312.html => a00354.html} | 829 ++++++-------
doc/html/a00355.html | 111 ++
doc/html/{a00313.html => a00356.html} | 244 ++--
doc/html/{a00314.html => a00357.html} | 339 +++---
doc/html/a00358.html | 150 +++
doc/html/annotated.html | 177 +--
doc/html/concepts.html | 4 +-
doc/html/{a00122.html => deprecated.html} | 14 +-
doc/html/files.html | 75 +-
doc/html/functions.html | 397 +++---
doc/html/functions_enum.html | 10 +-
doc/html/functions_eval.html | 22 +-
doc/html/functions_func.html | 316 ++---
doc/html/functions_rela.html | 8 +-
doc/html/functions_type.html | 32 +-
doc/html/functions_vars.html | 33 +-
.../{parallel_do_body_req.html => globals.html} | 30 +-
...parallel_do_body_req.html => globals_func.html} | 28 +-
doc/html/graph_legend.html | 4 +-
doc/html/hierarchy.html | 183 +--
doc/html/index.html | 4 +-
doc/html/modules.html | 6 +-
doc/html/namespacemembers.html | 83 +-
doc/html/namespacemembers_enum.html | 6 +-
doc/html/namespacemembers_eval.html | 10 +-
doc/html/namespacemembers_func.html | 51 +-
doc/html/namespacemembers_type.html | 19 +-
doc/html/namespacemembers_vars.html | 9 +-
doc/html/namespaces.html | 8 +-
doc/html/pages.html | 8 +-
doc/html/parallel_do_body_req.html | 4 +-
doc/html/parallel_for_body_req.html | 4 +-
doc/html/parallel_reduce_body_req.html | 4 +-
...a00122.html => parallel_reduce_lambda_req.html} | 10 +-
doc/html/parallel_scan_body_req.html | 4 +-
doc/html/parallel_sort_iter_req.html | 4 +-
doc/html/range_req.html | 4 +-
examples/GettingStarted/index.html | 2 +-
examples/GettingStarted/sub_string_finder/Makefile | 12 +-
.../sub_string_finder/Makefile.windows | 12 +-
.../GettingStarted/sub_string_finder/index.html | 2 +-
.../sub_string_finder/sub_string_finder.cpp | 56 +-
.../sub_string_finder_extended.cpp | 58 +-
.../sub_string_finder/sub_string_finder_pretty.cpp | 56 +-
.../vc7.1/sub_string_finder.vcproj | 2 +-
.../vc7.1/sub_string_finder_extended.vcproj | 2 +-
.../vc7.1/sub_string_finder_pretty.vcproj | 2 +-
.../sub_string_finder/vc8/sub_string_finder.vcproj | 4 +-
.../vc8/sub_string_finder_extended.vcproj | 4 +-
.../vc8/sub_string_finder_pretty.vcproj | 4 +-
.../sub_string_finder/vc9/sub_string_finder.vcproj | 4 +-
.../vc9/sub_string_finder_extended.vcproj | 4 +-
.../vc9/sub_string_finder_pretty.vcproj | 4 +-
examples/Makefile | 35 +-
examples/common/gui/Makefile.win | 2 +-
examples/common/gui/convideo.cpp | 22 +-
examples/common/gui/ddvideo.cpp | 26 +-
examples/common/gui/dxcheck.bat | 2 +-
examples/common/gui/gdivideo.cpp | 2 +-
examples/common/gui/macvideo.cpp | 4 +-
examples/common/gui/video.h | 2 +-
examples/common/gui/winvideo.h | 53 +-
examples/common/gui/xvideo.cpp | 4 +-
examples/common/index.html | 2 +-
.../concurrent_hash_map/count_strings/Makefile | 7 +-
.../count_strings/Makefile.windows | 7 +-
.../count_strings/count_strings.cpp | 27 +-
.../concurrent_hash_map/count_strings/index.html | 2 +-
.../count_strings/vc7.1/count_strings.vcproj | 2 +-
.../count_strings/vc8/count_strings.vcproj | 4 +-
.../count_strings/vc9/count_strings.vcproj | 4 +-
examples/concurrent_hash_map/index.html | 2 +-
examples/index.html | 2 +-
examples/parallel_do/index.html | 2 +-
examples/parallel_do/parallel_preorder/Graph.cpp | 2 +-
examples/parallel_do/parallel_preorder/Graph.h | 2 +-
examples/parallel_do/parallel_preorder/Makefile | 7 +-
.../parallel_do/parallel_preorder/Makefile.windows | 7 +-
examples/parallel_do/parallel_preorder/Matrix.h | 2 +-
examples/parallel_do/parallel_preorder/index.html | 2 +-
.../parallel_preorder/parallel_preorder.cpp | 8 +-
.../vc7.1/parallel_preorder.vcproj | 2 +-
.../parallel_preorder/vc8/parallel_preorder.vcproj | 4 +-
.../parallel_preorder/vc9/parallel_preorder.vcproj | 4 +-
examples/parallel_for/index.html | 2 +-
examples/parallel_for/polygon_overlay/Makefile | 9 +-
.../parallel_for/polygon_overlay/Makefile.windows | 7 +-
examples/parallel_for/polygon_overlay/index.html | 2 +-
examples/parallel_for/polygon_overlay/polymain.cpp | 2 +-
examples/parallel_for/polygon_overlay/polymain.h | 2 +-
examples/parallel_for/polygon_overlay/polyover.cpp | 2 +-
examples/parallel_for/polygon_overlay/polyover.h | 2 +-
.../parallel_for/polygon_overlay/pover_global.h | 2 +-
.../parallel_for/polygon_overlay/pover_video.cpp | 2 +-
.../parallel_for/polygon_overlay/pover_video.h | 2 +-
examples/parallel_for/polygon_overlay/rpolygon.h | 2 +-
.../parallel_for/polygon_overlay/vc8/pover.vcproj | 8 +-
.../parallel_for/polygon_overlay/vc9/pover.vcproj | 8 +-
examples/parallel_for/seismic/Makefile | 9 +-
examples/parallel_for/seismic/Makefile.windows | 7 +-
.../parallel_for/seismic/SeismicSimulation.cpp | 2 +-
examples/parallel_for/seismic/index.html | 2 +-
.../seismic/vc7.1/SeismicSimulation.vcproj | 4 +-
.../seismic/vc8/SeismicSimulation.vcproj | 8 +-
.../seismic/vc9/SeismicSimulation.vcproj | 8 +-
examples/parallel_for/tachyon/Makefile | 4 +-
examples/parallel_for/tachyon/Makefile.windows | 4 +-
examples/parallel_for/tachyon/index.html | 2 +-
examples/parallel_for/tachyon/src/api.cpp | 2 +-
examples/parallel_for/tachyon/src/api.h | 2 +-
examples/parallel_for/tachyon/src/apigeom.cpp | 2 +-
examples/parallel_for/tachyon/src/apitrigeom.cpp | 2 +-
examples/parallel_for/tachyon/src/apitrigeom.h | 2 +-
examples/parallel_for/tachyon/src/bndbox.cpp | 2 +-
examples/parallel_for/tachyon/src/bndbox.h | 2 +-
examples/parallel_for/tachyon/src/box.cpp | 2 +-
examples/parallel_for/tachyon/src/box.h | 2 +-
examples/parallel_for/tachyon/src/camera.cpp | 2 +-
examples/parallel_for/tachyon/src/camera.h | 2 +-
examples/parallel_for/tachyon/src/coordsys.cpp | 2 +-
examples/parallel_for/tachyon/src/coordsys.h | 2 +-
examples/parallel_for/tachyon/src/cylinder.cpp | 2 +-
examples/parallel_for/tachyon/src/cylinder.h | 2 +-
examples/parallel_for/tachyon/src/extvol.cpp | 2 +-
examples/parallel_for/tachyon/src/extvol.h | 2 +-
examples/parallel_for/tachyon/src/getargs.cpp | 2 +-
examples/parallel_for/tachyon/src/getargs.h | 2 +-
examples/parallel_for/tachyon/src/global.cpp | 2 +-
examples/parallel_for/tachyon/src/global.h | 2 +-
examples/parallel_for/tachyon/src/grid.cpp | 2 +-
examples/parallel_for/tachyon/src/grid.h | 2 +-
examples/parallel_for/tachyon/src/imageio.cpp | 2 +-
examples/parallel_for/tachyon/src/imageio.h | 2 +-
examples/parallel_for/tachyon/src/imap.cpp | 2 +-
examples/parallel_for/tachyon/src/imap.h | 2 +-
examples/parallel_for/tachyon/src/intersect.cpp | 2 +-
examples/parallel_for/tachyon/src/intersect.h | 2 +-
examples/parallel_for/tachyon/src/jpeg.cpp | 2 +-
examples/parallel_for/tachyon/src/jpeg.h | 2 +-
examples/parallel_for/tachyon/src/light.cpp | 2 +-
examples/parallel_for/tachyon/src/light.h | 2 +-
examples/parallel_for/tachyon/src/machine.h | 2 +-
examples/parallel_for/tachyon/src/macros.h | 2 +-
examples/parallel_for/tachyon/src/objbound.cpp | 2 +-
examples/parallel_for/tachyon/src/objbound.h | 2 +-
examples/parallel_for/tachyon/src/parse.cpp | 2 +-
examples/parallel_for/tachyon/src/parse.h | 2 +-
examples/parallel_for/tachyon/src/plane.cpp | 2 +-
examples/parallel_for/tachyon/src/plane.h | 2 +-
examples/parallel_for/tachyon/src/ppm.cpp | 2 +-
examples/parallel_for/tachyon/src/ppm.h | 2 +-
examples/parallel_for/tachyon/src/pthread.cpp | 2 +-
examples/parallel_for/tachyon/src/pthread.h | 2 +-
examples/parallel_for/tachyon/src/quadric.cpp | 2 +-
examples/parallel_for/tachyon/src/quadric.h | 2 +-
examples/parallel_for/tachyon/src/render.cpp | 2 +-
examples/parallel_for/tachyon/src/render.h | 2 +-
examples/parallel_for/tachyon/src/ring.cpp | 2 +-
examples/parallel_for/tachyon/src/ring.h | 2 +-
examples/parallel_for/tachyon/src/shade.cpp | 2 +-
examples/parallel_for/tachyon/src/shade.h | 2 +-
examples/parallel_for/tachyon/src/sphere.cpp | 2 +-
examples/parallel_for/tachyon/src/sphere.h | 2 +-
examples/parallel_for/tachyon/src/texture.cpp | 2 +-
examples/parallel_for/tachyon/src/texture.h | 2 +-
examples/parallel_for/tachyon/src/tgafile.cpp | 2 +-
examples/parallel_for/tachyon/src/tgafile.h | 2 +-
examples/parallel_for/tachyon/src/trace.h | 2 +-
examples/parallel_for/tachyon/src/trace.serial.cpp | 2 +-
examples/parallel_for/tachyon/src/trace.tbb.cpp | 2 +-
examples/parallel_for/tachyon/src/trace.tbb1d.cpp | 2 +-
examples/parallel_for/tachyon/src/trace_rest.cpp | 2 +-
examples/parallel_for/tachyon/src/triangle.cpp | 2 +-
examples/parallel_for/tachyon/src/triangle.h | 2 +-
examples/parallel_for/tachyon/src/types.h | 2 +-
examples/parallel_for/tachyon/src/ui.cpp | 2 +-
examples/parallel_for/tachyon/src/ui.h | 2 +-
examples/parallel_for/tachyon/src/util.cpp | 2 +-
examples/parallel_for/tachyon/src/util.h | 2 +-
examples/parallel_for/tachyon/src/vector.cpp | 2 +-
examples/parallel_for/tachyon/src/vector.h | 2 +-
examples/parallel_for/tachyon/src/video.cpp | 2 +-
examples/parallel_for/tachyon/src/video.h | 2 +-
examples/parallel_for/tachyon/src/vol.cpp | 2 +-
examples/parallel_for/tachyon/src/vol.h | 2 +-
.../tachyon/vc7.1/tachyon.serial.vcproj | 4 +
.../parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj | 12 +-
.../tachyon/vc7.1/tachyon.tbb1d.vcproj | 12 +-
.../parallel_for/tachyon/vc8/tachyon.tbb.vcproj | 8 +-
.../parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj | 8 +-
.../parallel_for/tachyon/vc9/tachyon.tbb.vcproj | 8 +-
.../parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj | 8 +-
examples/parallel_reduce/convex_hull/Makefile | 10 +-
.../parallel_reduce/convex_hull/Makefile.windows | 12 +-
examples/parallel_reduce/convex_hull/convex_hull.h | 6 +-
.../convex_hull/convex_hull_bench.cpp | 2 +-
.../convex_hull/convex_hull_sample.cpp | 2 +-
examples/parallel_reduce/convex_hull/index.html | 2 +-
.../convex_hull/vc7.1/convex_hull_bench.vcproj | 2 +-
.../convex_hull/vc7.1/convex_hull_sample.vcproj | 2 +-
.../convex_hull/vc8/convex_hull_benchmark.vcproj | 4 +-
.../convex_hull/vc8/convex_hull_sample.vcproj | 4 +-
.../convex_hull/vc9/convex_hull_benchmark.vcproj | 4 +-
.../convex_hull/vc9/convex_hull_sample.vcproj | 4 +-
examples/parallel_reduce/index.html | 2 +-
examples/parallel_reduce/primes/Makefile | 7 +-
examples/parallel_reduce/primes/Makefile.windows | 7 +-
examples/parallel_reduce/primes/index.html | 2 +-
examples/parallel_reduce/primes/primes.cpp | 2 +-
.../parallel_reduce/primes/vc7.1/primes.vcproj | 2 +-
examples/parallel_reduce/primes/vc8/primes.vcproj | 4 +-
examples/parallel_reduce/primes/vc9/primes.vcproj | 4 +-
examples/parallel_while/index.html | 2 +-
.../parallel_while/parallel_preorder/Graph.cpp | 2 +-
examples/parallel_while/parallel_preorder/Graph.h | 2 +-
examples/parallel_while/parallel_preorder/Makefile | 7 +-
.../parallel_preorder/Makefile.windows | 7 +-
examples/parallel_while/parallel_preorder/Matrix.h | 2 +-
.../parallel_while/parallel_preorder/index.html | 2 +-
.../parallel_preorder/parallel_preorder.cpp | 9 +-
.../vc7.1/parallel_preorder.vcproj | 2 +-
.../parallel_preorder/vc8/parallel_preorder.vcproj | 4 +-
.../parallel_preorder/vc9/parallel_preorder.vcproj | 4 +-
examples/pipeline/index.html | 2 +-
.../parallel_preorder => pipeline/square}/Makefile | 22 +-
.../{text_filter => square}/Makefile.windows | 24 +-
.../square/gen_input.cpp} | 23 +-
.../pipeline/{text_filter => square}/index.html | 23 +-
.../text_filter.cpp => square/square.cpp} | 149 ++-
.../square/vc7.1/gen_input.vcproj} | 50 +-
examples/pipeline/square/vc7.1/square.sln | 30 +
.../vc7.1/square.vcproj} | 14 +-
.../square/vc8/gen_input.vcproj} | 82 +-
examples/pipeline/square/vc8/square.sln | 38 +
.../vc8/square.vcproj} | 40 +-
.../square/vc9/gen_input.vcproj} | 122 +-
examples/pipeline/square/vc9/square.sln | 38 +
.../vc9/square.vcproj} | 104 +-
.../square/xcode/square.xcodeproj/project.pbxproj | 437 +++++++
examples/pipeline/text_filter/Makefile | 7 +-
examples/pipeline/text_filter/Makefile.windows | 7 +-
examples/pipeline/text_filter/index.html | 2 +-
examples/pipeline/text_filter/text_filter.cpp | 25 +-
.../pipeline/text_filter/vc7.1/text_filter.vcproj | 2 +-
.../pipeline/text_filter/vc8/text_filter.vcproj | 4 +-
.../pipeline/text_filter/vc9/text_filter.vcproj | 4 +-
examples/task/index.html | 2 +-
examples/task/tree_sum/Makefile | 9 +-
examples/task/tree_sum/Makefile.windows | 9 +-
.../task/tree_sum/OptimizedParallelSumTree.cpp | 2 +-
examples/task/tree_sum/SerialSumTree.cpp | 2 +-
examples/task/tree_sum/SimpleParallelSumTree.cpp | 2 +-
examples/task/tree_sum/common.h | 2 +-
examples/task/tree_sum/index.html | 2 +-
examples/task/tree_sum/main.cpp | 2 +-
examples/task/tree_sum/vc7.1/tree_sum.vcproj | 2 +-
examples/task/tree_sum/vc8/tree_sum.vcproj | 4 +-
examples/task/tree_sum/vc9/tree_sum.vcproj | 4 +-
examples/test_all/fibonacci/Fibonacci.cpp | 7 +-
examples/test_all/fibonacci/Makefile | 7 +-
examples/test_all/fibonacci/Makefile.windows | 7 +-
examples/test_all/fibonacci/index.html | 2 +-
examples/test_all/fibonacci/vc7.1/fibonacci.vcproj | 2 +-
examples/test_all/fibonacci/vc8/fibonacci.vcproj | 4 +-
examples/test_all/fibonacci/vc9/fibonacci.vcproj | 4 +-
examples/test_all/index.html | 2 +-
include/index.html | 2 +-
include/tbb/_tbb_windef.h | 14 +-
include/tbb/aligned_space.h | 2 +-
include/tbb/atomic.h | 59 +-
include/tbb/blocked_range.h | 2 +-
include/tbb/blocked_range2d.h | 2 +-
include/tbb/blocked_range3d.h | 2 +-
include/tbb/cache_aligned_allocator.h | 29 +-
include/tbb/concurrent_hash_map.h | 139 ++-
include/tbb/concurrent_queue.h | 74 +-
include/tbb/concurrent_vector.h | 124 +-
include/tbb/machine/ibm_aix51.h | 2 +-
include/tbb/machine/linux_common.h | 6 +-
include/tbb/machine/linux_em64t.h | 30 +-
include/tbb/machine/linux_ia32.h | 89 +-
include/tbb/machine/linux_itanium.h | 2 +-
include/tbb/machine/mac_ppc.h | 31 +-
include/tbb/machine/windows_em64t.h | 59 +-
include/tbb/machine/windows_ia32.h | 53 +-
include/tbb/machine/windows_ia32_inline.h | 2 +-
include/tbb/mutex.h | 38 +-
.../tbb/null_mutex.h | 40 +-
.../tbb/null_rw_mutex.h | 42 +-
include/tbb/parallel_do.h | 83 +-
include/tbb/parallel_for.h | 2 +-
include/tbb/parallel_reduce.h | 141 ++-
include/tbb/parallel_scan.h | 2 +-
include/tbb/parallel_sort.h | 78 +-
include/tbb/parallel_while.h | 2 +-
include/tbb/partitioner.h | 28 +-
include/tbb/pipeline.h | 78 +-
include/tbb/queuing_mutex.h | 24 +-
include/tbb/queuing_rw_mutex.h | 46 +-
include/tbb/recursive_mutex.h | 38 +-
include/tbb/scalable_allocator.h | 80 +-
include/tbb/spin_mutex.h | 45 +-
include/tbb/spin_rw_mutex.h | 45 +-
include/tbb/task.h | 82 +-
include/tbb/task_scheduler_init.h | 17 +-
include/tbb/task_scheduler_observer.h | 8 +-
include/tbb/tbb_allocator.h | 33 +-
include/tbb/tbb_exception.h | 10 +-
include/tbb/tbb_machine.h | 71 +-
include/tbb/tbb_profiling.h | 105 ++
include/tbb/tbb_stddef.h | 93 +-
include/tbb/tbb_thread.h | 37 +-
include/tbb/tick_count.h | 11 +-
index.html | 2 +-
src/Makefile | 20 +-
src/index.html | 2 +-
src/old/concurrent_queue_v2.cpp | 22 +-
src/old/concurrent_queue_v2.h | 26 +-
src/old/concurrent_vector_v2.cpp | 4 +-
src/old/concurrent_vector_v2.h | 32 +-
src/old/spin_rw_mutex_v2.cpp | 6 +-
src/old/spin_rw_mutex_v2.h | 20 +-
src/old/test_concurrent_queue_v2.cpp | 32 +-
src/old/test_concurrent_vector_v2.cpp | 4 +-
src/old/test_mutex_v2.cpp | 2 +-
src/perf/harness_barrier.h | 2 +-
src/perf/perf_util.h | 7 +-
src/perf/statistics.cpp | 2 +-
src/perf/statistics.h | 2 +-
src/perf/statistics_xml.h | 2 +-
src/perf/time_base.cpp | 2 +-
src/perf/time_framework.h | 2 +-
src/perf/time_hash_map.cpp | 2 +-
src/perf/time_unit.cpp | 2 +-
src/perf/time_vector.cpp | 2 +-
src/tbb/cache_aligned_allocator.cpp | 24 +-
src/tbb/concurrent_hash_map.cpp | 2 +-
src/tbb/concurrent_queue.cpp | 259 ++--
src/tbb/concurrent_vector.cpp | 65 +-
src/tbb/em64t-masm/atomic_support.asm | 2 +-
src/tbb/gate.h | 42 +-
src/tbb/ia32-masm/atomic_support.asm | 2 +-
src/tbb/ia32-masm/lock_byte.asm | 2 +-
src/tbb/ibm_aix51/atomic_support.c | 2 +-
src/tbb/itanium-gas/atomic_support.s | 2 +-
src/tbb/itanium-gas/lock_byte.s | 2 +-
src/tbb/itanium-gas/log2.s | 2 +-
src/tbb/itanium-gas/pause.s | 2 +-
src/tbb/itt_notify.cpp | 166 ++-
src/tbb/itt_notify.h | 145 ++-
src/tbb/lin32-tbb-export.def | 12 +-
src/tbb/lin64-tbb-export.def | 11 +-
src/tbb/lin64ipf-tbb-export.def | 11 +-
src/tbb/mac32-tbb-export.def | 12 +-
src/tbb/mac64-tbb-export.def | 11 +-
src/tbb/mutex.cpp | 4 +-
src/tbb/pipeline.cpp | 191 ++-
src/tbb/queuing_mutex.cpp | 8 +-
src/tbb/queuing_rw_mutex.cpp | 63 +-
src/tbb/recursive_mutex.cpp | 4 +-
src/tbb/spin_mutex.cpp | 6 +-
src/tbb/spin_rw_mutex.cpp | 12 +-
src/tbb/task.cpp | 546 +++++----
src/tbb/tbb_assert_impl.h | 14 +-
src/tbb/tbb_misc.cpp | 97 +-
src/tbb/tbb_misc.h | 21 +-
src/tbb/tbb_resource.rc | 11 +-
src/tbb/tbb_thread.cpp | 2 +-
src/tbb/tbb_version.h | 33 +-
src/tbb/win32-tbb-export.def | 11 +-
src/tbb/win64-tbb-export.def | 11 +-
src/tbbmalloc/Customize.h | 19 +-
src/tbbmalloc/LifoQueue.h | 4 +-
src/tbbmalloc/MapMemory.h | 4 +-
src/tbbmalloc/MemoryAllocator.cpp | 1153 +++++++++++-------
src/tbbmalloc/Statistics.h | 2 +-
src/tbbmalloc/TypeDefinitions.h | 36 +-
src/tbbmalloc/lin-tbbmalloc-export.def | 11 +-
...tbbmalloc-export.def => lin32-proxy-export.def} | 26 +-
...tbbmalloc-export.def => lin64-proxy-export.def} | 26 +-
...malloc-export.def => lin64ipf-proxy-export.def} | 26 +-
src/tbbmalloc/mac32-tbbmalloc-export.def | 6 +-
src/tbbmalloc/mac64-tbbmalloc-export.def | 6 +-
src/tbbmalloc/proxy.cpp | 179 +++
.../machine/ibm_aix51.h => src/tbbmalloc/proxy.h | 45 +-
src/tbbmalloc/tbbmalloc.cpp | 145 ++-
src/tbbmalloc/tbbmalloc.rc | 11 +-
src/tbbmalloc/win32-tbbmalloc-export.def | 6 +-
src/tbbmalloc/win64-tbbmalloc-export.def | 6 +-
src/test/harness.h | 157 +--
src/test/harness_allocator.h | 6 +-
src/test/harness_assert.h | 2 +-
src/test/harness_bad_expr.h | 13 +-
src/test/harness_cpu.h | 7 +-
src/test/harness_m128.h | 2 +-
src/test/harness_memory.h | 8 +-
src/test/harness_trace.h | 4 +-
src/test/test_ScalableAllocator.cpp | 2 +-
src/test/test_ScalableAllocator_STL.cpp | 2 +-
src/test/test_aligned_space.cpp | 2 +-
src/test/test_allocator.h | 11 +-
src/test/test_assembly.cpp | 2 +-
src/test/test_atomic.cpp | 228 +++-
src/test/test_blocked_range.cpp | 2 +-
src/test/test_blocked_range2d.cpp | 2 +-
src/test/test_blocked_range3d.cpp | 2 +-
src/test/test_cache_aligned_allocator.cpp | 2 +-
src/test/test_cache_aligned_allocator_STL.cpp | 2 +-
src/test/test_compiler.cpp | 12 +-
src/test/test_concurrent_hash_map.cpp | 69 +-
src/test/test_concurrent_hash_map_string.cpp | 84 --
src/test/test_concurrent_queue.cpp | 383 +++++-
src/test/test_concurrent_vector.cpp | 87 +-
src/test/test_eh_algorithms.cpp | 1263 +++++++++++++++++++-
src/test/test_eh_tasks.cpp | 105 +-
src/test/test_halt.cpp | 15 +-
src/test/test_handle_perror.cpp | 2 +-
src/test/test_inits_loop.cpp | 14 +-
src/test/test_malloc_compliance.cpp | 174 +--
src/test/test_malloc_pure_c.c | 3 +-
src/test/test_malloc_regression.cpp | 109 ++
src/test/test_model_plugin.cpp | 15 +-
src/test/test_mutex.cpp | 175 ++-
src/test/test_mutex_native_threads.cpp | 208 ++--
src/test/test_openmp.cpp | 26 +-
src/test/test_parallel_do.cpp | 4 +-
src/test/test_parallel_for.cpp | 2 +-
src/test/test_parallel_reduce.cpp | 2 +-
src/test/test_parallel_scan.cpp | 15 +-
src/test/test_parallel_sort.cpp | 13 +-
src/test/test_parallel_while.cpp | 7 +-
src/test/test_pipeline.cpp | 199 +--
src/test/test_rwm_upgrade_downgrade.cpp | 36 +-
src/test/test_task.cpp | 65 +-
src/test/test_task_assertions.cpp | 19 +-
src/test/test_task_leaks.cpp | 13 +-
src/test/test_task_scheduler_init.cpp | 14 +-
src/test/test_task_scheduler_observer.cpp | 8 +-
src/test/test_tbb_thread.cpp | 12 +-
src/test/test_tbb_version.cpp | 51 +-
src/test/test_tick_count.cpp | 13 +-
src/test/test_yield.cpp | 12 +-
736 files changed, 23691 insertions(+), 19182 deletions(-)
diff --git a/CHANGES b/CHANGES
index 89c0d74..31a98ec 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,38 +1,170 @@
--------------------------------------------------------------------------------
+TBB 2.1 Update 3 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U2 commercial-aligned release):
+
+- Added support for aligned allocations to the TBB memory allocator.
+- Added a special library to use with LD_PRELOAD on Linux* in order to
+ replace the standard memory allocation routines in C/C++ with the
+ TBB memory allocator.
+- Added null_mutex and null_rw_mutex: no-op classes interface-compliant
+ to other TBB mutexes.
+- Improved performance of parallel_sort, to close most of gap with
+ std::sort in serial, and beat it on 2 and more cores.
+- Fixed the problem where parallel_for hanged after exception throw
+ if affinity_partitioner was used.
+- Fixed VS 2008 warnings about mbstowcs deprecation, and some others.
+- Fixed operator== for concurrent_vector::iterator to work correctly
+ with different vector instances.
+- A few other small changes.
+
+------------------------------------------------------------------------
+TBB 2.1 Update 2 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 U1 commercial-aligned release):
+
+- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;
+ warnings found on this level were cleaned or suppressed.
+- Added TBB_runtime_interface_version API function.
+- Added new example: pipeline/square.
+- Added exception handling and cancellation support
+ for parallel_do and pipeline.
+- Added new serial out of order filter for tbb::pipeline.
+- Added copy constructor and [begin,end) constructor to concurrent_queue.
+- Added some support for beta version of Intel(R) Parallel Amplifier.
+- Added scripts to set environment for cross-compilation of 32-bit
+ applications on 64-bit Linux with Intel(R) C++ Compiler.
+- Dependency from Microsoft* CRT was integrated to the libraries using
+ manifests, to avoid issues if called from code that uses different
+ version of Visual C++* runtime than the library.
+- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,
+ TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.
+- Fixed semantics of concurrent_vector::clear() to not deallocate
+ internal arrays. Fixed compact() to perform such deallocation later.
+- Fixed the issue with atomic<T*> when T is incomplete type.
+- Fixed the issue with atomic<T*>::operator= reported at the forum.
+- Fixed the issue with using tbb::task::self() in task destructor
+ reported at the forum.
+- Fixed more concurrent_queue issues also reported at the forum.
+- Improved support for Intel(R) Threading Analysis Tools
+ on Intel(R) 64 architecture.
+- Improved support for PowerPC* Macintosh*, including the fix
+ for a bug in masked compare-and-swap reported by a customer.
+- A number of other improvements to code, tests, makefiles, examples
+ and documents.
+
+Open-source contributions integrated:
+- Changes in the memory allocator were partially integrated.
+- linker optimization: /incremental:no.
+
+------------------------------------------------------------------------
+TBB 2.1 Update 1 commercial-aligned release
+
+Changes (w.r.t. TBB 2.1 Gold commercial-aligned release):
+
+- Fixed small memory leak in the memory allocator.
+- Incorporates all open-source-release changes down to TBB 2.1 GOLD,
+ except for:
+ - 20080825 changes for parallel_do;
+
+------------------------------------------------------------------------
+20080825 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Added exception handling and cancellation support for parallel_do.
+- Added default HashCompare template argument for concurrent_hash_map.
+- Fixed concurrent_queue.clear() issues due to incorrect assumption
+ about clear() being private method.
+- Added the possibility to use TBB in applications that change
+ default calling conventions (Windows* only).
+- Many improvements to code, tests, examples, makefiles and documents.
+
+Bugs fixed:
+
+- 120, 130 - memset declaration missed in concurrent_hash_map.h
+
+------------------------------------------------------------------------
+20080724 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Inline assembly for atomic operations improved for gcc 4.3
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+20080709 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- operator=() was added to the tbb_thread class according to
+ the current working draft for std::thread.
+- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.
+
+Bugs fixed:
+
+- 127 - concurrent_hash_map::range fixed to split correctly.
+
+Open-source contributions integrated:
+
+- fix_set_midpoint.diff by jyasskin
+- SPARC* support in makefiles by Raf Schietekat
+
+------------------------------------------------------------------------
+20080622 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Fixed a hang that rarely happened on Linux
+ during deinitialization of the TBB scheduler.
+- Improved support for Intel(R) Thread Checker.
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+TBB 2.1 GOLD commercial-aligned release
+
+Changes (w.r.t. TBB 2.0 U3 commercial-aligned release):
+
+- All open-source-release changes down to, and including, TBB 2.0 GOLD
+ below, were incorporated into this release.
+
+------------------------------------------------------------------------
20080605 open-source release
Changes (w.r.t. previous open-source release):
-- Exported symbols now explicitly controlled with version scripts on Linux
-- Interfaces polished for exception handling & algorithm cancellation
-- Cache behavior improvements in the scalable allocator
-- Improvements in text_filter, polygon_overlay, and other examples
-- A lot of other stability improvements in code, tests, and makefiles
+- Explicit control of exported symbols by version scripts added on Linux.
+- Interfaces polished for exception handling & algorithm cancellation.
+- Cache behavior improvements in the scalable allocator.
+- Improvements in text_filter, polygon_overlay, and other examples.
+- A lot of other stability improvements in code, tests, and makefiles.
+- First release where binary packages include headers/docs/examples, so
+ binary packages are now self-sufficient for using TBB.
Open-source contributions integrated:
- atomics patch (partially).
-- tick_count warning patch
+- tick_count warning patch.
Bugs fixed:
- 118 - fix for boost compatibility.
- 123 - fix for tbb_machine.h.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080512 open-source release
Changes (w.r.t. previous open-source release):
-- Fixed problem with backward binary compatibility of debug Linux builds
-- Sun* Studio* support added
+- Fixed a problem with backward binary compatibility
+ of debug Linux builds.
+- Sun* Studio* support added.
- soname support added on Linux via linker script. To restore backward
- binary compatibility *.so -> *.so.2 softlinks should be created
+ binary compatibility, *.so -> *.so.2 softlinks should be created.
- concurrent_hash_map improvements - added few new forms of insert()
method and fixed precondition and guarantees of erase() methods.
Added runtime warning reporting about bad hash function used for
the container. Various improvements for performance and concurrency.
-- Cancellation mechanism reimplemented so that it does not hurt scalability
+- Cancellation mechanism reworked so that it does not hurt scalability.
- Algorithm parallel_do reworked. Requirement for Body::argument_type
definition removed, and work item argument type can be arbitrarily
cv-qualified.
@@ -47,7 +179,7 @@ Bugs fixed:
- 112 - fix for soname support.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)
Corresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)
@@ -60,7 +192,7 @@ Changes (w.r.t. TBB 2.0 U2 commercial-aligned release):
- Removed spin-waiting in pipeline and concurrent_queue.
- A few more small bug fixes from open-source releases below.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080408 open-source release
Changes (w.r.t. previous open-source release):
@@ -77,27 +209,27 @@ Open-source contributions integrated:
- Two sets of Sun patches for IA Solaris support.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080402 open-source release
Changes (w.r.t. previous open-source release):
- Exception handling and cancellation support for tasks and algorithms
- fully enabled.
+ fully enabled.
- Exception safety guaranties defined and fixed for all concurrent
- containers
+ containers.
- User-defined memory allocator support added to all concurrent
- containers
-- Performance improvement of concurrent_hash_map, spin_rw_mutex
+ containers.
+- Performance improvement of concurrent_hash_map, spin_rw_mutex.
- Critical fix for a rare race condition during scheduler
- initialization/de-initialization
-- New methods added for concurrent containers to be closer to STL, as
- well as automatic filters removal from pipeline and __TBB_AtomicAND
- function
+ initialization/de-initialization.
+- New methods added for concurrent containers to be closer to STL,
+ as well as automatic filters removal from pipeline
+ and __TBB_AtomicAND function.
- The volatile keyword dropped from where it is not really needed.
- A few more minor improvements.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080319 open-source release
Changes (w.r.t. previous open-source release):
@@ -111,7 +243,7 @@ Bugs fixed:
- 116 - fix for compilation issues with gcc version 4.2.1.
- 120 - fix for compilation issues with gcc version 4.3.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080311 open-source release
Changes (w.r.t. previous open-source release):
@@ -123,7 +255,7 @@ Changes (w.r.t. previous open-source release):
binary compatibility guaranteed with stable releases only.
- Various improvements to code, tests, examples and Makefiles.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080304 open-source release
Changes (w.r.t. previous open-source release):
@@ -140,7 +272,7 @@ Bugs fixed:
- TR575 - fixed a deadlock occurring on Windows in startup/shutdown
under some conditions.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080226 open-source release
Changes (w.r.t. previous open-source release):
@@ -152,7 +284,7 @@ Changes (w.r.t. previous open-source release):
- Improved support for Intel(R) Thread Checker.
- Various improvements to code, tests, examples and Makefiles.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)
Corresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)
@@ -172,7 +304,7 @@ Bugs fixed:
- TR569 - Memory leak in concurrent_queue.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080207 open-source release
Changes (w.r.t. previous open-source release):
@@ -188,7 +320,7 @@ Bugs fixed:
counterparts.
- TR569 - Memory leak in concurrent_queue.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080122 open-source release
Changes (w.r.t. previous open-source release):
@@ -198,7 +330,7 @@ Changes (w.r.t. previous open-source release):
performance.
- Minor improvements to unittests and performance tests.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20080115 open-source release
Changes (w.r.t. previous open-source release):
@@ -219,7 +351,7 @@ Bugs fixed:
- 102 - Support for parallel build with gmake -j
- 114 - /Wp64 build warning on Windows*.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20071218 open-source release
Changes (w.r.t. previous open-source release):
@@ -230,7 +362,7 @@ Changes (w.r.t. previous open-source release):
- Full support for 32-bit PowerMac including export files for builds.
- Improvements to parallel_do.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20071206 open-source release
Changes (w.r.t. previous open-source release):
@@ -243,7 +375,7 @@ Changes (w.r.t. previous open-source release):
- Engineering work in progress on exception behavior.
- Unittest improvements.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20071127 open-source release
Changes (w.r.t. previous open-source release):
@@ -272,7 +404,7 @@ Bugs fixed:
- 108 - Removed broken affinity.h reference.
- 101 - Does not build on Debian Lenny (replaced arch with uname -m).
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20071030 open-source release
Changes (w.r.t. previous open-source release):
@@ -289,7 +421,7 @@ Changes (w.r.t. previous open-source release):
- Engineering work in progress on a new parallel_do algorithm.
- Unittest improvements.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20070927 open-source release
Changes:
@@ -298,7 +430,7 @@ Changes:
- Begin introduction of new concurrent_vector interfaces not released
with TBB 2.0 U1.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)
Corresponds to commercial 014 (for Linux*, 016) packages.
@@ -310,13 +442,13 @@ Changes (w.r.t. previous commercial-aligned release):
- Made a number of changes to the officially supported OS list:
Added Linux* OSs:
Asianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,
- Turbo Linux* 11, Ubuntu* 7.04
+ Turbo Linux* 11, Ubuntu* 7.04;
Dropped Linux* OSs:
Asianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,
Mandriva/Mandrake* 10.1, Miracle Linux* 4.0,
- Red Flag* DC Server 5.0
+ Red Flag* DC Server 5.0;
Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and
- forward) are now supported
+ forward) are now supported.
- Commercial installers on Linux* fixed to recommend the correct
binaries to use in more cases, with less unnecessary warnings.
- Changes to eliminate spurious build warnings.
@@ -331,7 +463,7 @@ Bugs fixed:
- 93 - Removed misleading comments in task.h.
- 94 - See above.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20070815 open-source release
Changes:
@@ -349,7 +481,7 @@ Bugs fixed:
- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are
installed.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
20070719 open-source release
Changes:
@@ -357,12 +489,12 @@ Changes:
- Minor update to TBB 2.0 GOLD below.
- Changes to eliminate spurious build warnings.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
TBB 2.0 GOLD commercial-aligned release (package 010, July 19, 2007)
Corresponds to commercial 010 (for Linux*, 012) packages.
- TBB open-source debut release.
--------------------------------------------------------------------------------
+------------------------------------------------------------------------
* Other names and brands may be claimed as the property of others.
diff --git a/Makefile b/Makefile
index 6c442b4..383d1b9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
index 48225e1..aad1e78 100644
--- a/build/FreeBSD.gcc.inc
+++ b/build/FreeBSD.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -47,7 +47,7 @@ ifeq ($(cfg), release)
CPLUS_FLAGS = -O2 -DUSE_PTHREAD
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = -DTBB_DO_ASSERT -g -O0 -DUSE_PTHREAD
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
endif
ASM=
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
index 77dc13c..72f56ac 100644
--- a/build/FreeBSD.inc
+++ b/build/FreeBSD.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -63,7 +63,7 @@ else
export LD_LIBRARY_PATH := .
endif
-####### Build settigns ########################################################
+####### Build settings ########################################################
OBJ = o
DLL = so
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
index c78aabc..169c22a 100644
--- a/build/Makefile.tbb
+++ b/build/Makefile.tbb
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -52,6 +52,7 @@ ifeq (1,$(TBB_NOSTRICT))
# The files below need the -strict_ansi flag downgraded to -ansi to compile
KNOWN_NOSTRICT = concurrent_hash_map.o \
+ concurrent_queue.o \
concurrent_vector_v2.o \
concurrent_vector.o
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
index 4561451..f10b443 100644
--- a/build/Makefile.tbbmalloc
+++ b/build/Makefile.tbbmalloc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -41,13 +41,15 @@ VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)
KNOWN_NOSTRICT = test_ScalableAllocator_STL.$(OBJ) #test_malloc_compliance.$(OBJ)
KNOWN_WARNINGS = test_malloc_compliance.$(OBJ)
+CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
+
include $(tbb_root)/build/common_rules.inc
#------------------------------------------------------
# Define rules for making the TBBMalloc shared library.
#------------------------------------------------------
-# Object files that gmake up TBBMalloc
+# Object files that make up TBBMalloc
MALLOC_CPLUS.OBJ = tbbmalloc.$(OBJ)
MALLOC_CUSTOM.OBJ += tbb_misc_malloc.$(OBJ)
MALLOC_ASM.OBJ = $(TBB_ASM.OBJ)
@@ -55,36 +57,64 @@ MALLOC_ASM.OBJ = $(TBB_ASM.OBJ)
# MALLOC_CPLUS.OBJ is built in two steps due to Intel Compiler Tracker # C69574
MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) $(MALLOC_CUSTOM.OBJ) MemoryAllocator.$(OBJ)
MALLOC_CPLUS.OBJ += MemoryAllocator.$(OBJ)
+PROXY.OBJ := proxy.$(OBJ)
M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBB_BUILD=1
M_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)
# Suppress superfluous warnings for TBBmalloc compilation
$(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
+$(PROXY.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+
$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
tbb_misc_malloc.$(OBJ): tbb_misc.cpp version_string.tmp
$(CPLUS) $(COMPILE_ONLY) $(subst -strict_ansi,-ansi,$(M_CPLUS_FLAGS)) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDE_KEY). $(INCLUDES) $<
+MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)
+PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS)
+
ifneq (,$(MALLOC.DEF))
tbbmalloc.def: $(MALLOC.DEF)
$(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOC.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbbmalloc.def 2>$(NUL) || exit 0"
-LIB_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
+MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
$(MALLOC.DLL): tbbmalloc.def
endif
$(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)
-$(MALLOC.DLL): $(MALLOC.OBJ) $(TBBMALLOC.RES) $(MALLOC_NO_VERSION.DLL)
- $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(TBBMALLOC.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
+$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
+ $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
+
+ifneq (,$(MALLOCPROXY.DEF))
+tbbmallocproxy.def: $(MALLOCPROXY.DEF)
+ $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(MALLOCPROXY.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >tbbmallocproxy.def 2>$(NUL) || exit 0"
+
+PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def
+$(MALLOCPROXY.DLL): tbbmallocproxy.def
+endif
+
+ifneq (,$(MALLOCPROXY.DLL))
+$(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL)
+$(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL)
+ $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS)
+
+malloc: $(MALLOCPROXY.DLL)
+endif
ifneq (,$(MALLOC_NO_VERSION.DLL))
$(MALLOC_NO_VERSION.DLL):
echo "INPUT ($(MALLOC.DLL))" > $(MALLOC_NO_VERSION.DLL)
endif
-malloc: $(MALLOC.DLL)
+ifneq (,$(MALLOCPROXY_NO_VERSION.DLL))
+$(MALLOCPROXY_NO_VERSION.DLL):
+ echo "INPUT ($(MALLOCPROXY.DLL))" > $(MALLOCPROXY_NO_VERSION.DLL)
+endif
+
+malloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL)
#------------------------------------------------------
# End of rules for making the TBBMalloc shared library
@@ -97,22 +127,21 @@ malloc: $(MALLOC.DLL)
add_debug=$(basename $(1))_debug$(suffix $(1))
cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
-MALLOC_MAIN_TESTS = test_ScalableAllocator.exe test_ScalableAllocator_STL.exe test_malloc_compliance.exe
+MALLOC_MAIN_TESTS = test_ScalableAllocator.exe test_ScalableAllocator_STL.exe test_malloc_compliance.exe test_malloc_regression.exe
MALLOC_C_TESTS = test_malloc_pure_c.exe
$(MALLOC_MAIN_TESTS): %.exe: %.$(OBJ) $(call cross_suffix,$(MALLOC.LIB))
$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
$(MALLOC_C_TESTS): %.exe: %.$(OBJ) $(call cross_suffix,$(MALLOC.LIB))
- $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(INCLUDES) $^ $(LIBS) $(LINK_FLAGS)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
+# run_cmd is usually empty
malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS)
-ifndef norun
-malloc_test:
- $(TEST_LAUNCHER) ./test_malloc_compliance.exe
- ./test_ScalableAllocator.exe
- ./test_ScalableAllocator_STL.exe
- ./test_malloc_pure_c.exe
-endif # norun
+ $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_compliance.exe
+ $(run_cmd) ./test_ScalableAllocator.exe
+ $(run_cmd) ./test_ScalableAllocator_STL.exe
+ $(run_cmd) ./test_malloc_regression.exe
+ $(run_cmd) ./test_malloc_pure_c.exe
#------------------------------------------------------
# End of rules for making the TBBMalloc unit tests
diff --git a/build/Makefile.test b/build/Makefile.test
index 6c44596..9d86d32 100644
--- a/build/Makefile.test
+++ b/build/Makefile.test
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -46,6 +46,8 @@ endif
VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf
+CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1)
+
ifeq (1,$(TBB_NOSTRICT))
# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
# The Mac uses gcc 4.0, so the list is empty for that platform.
@@ -54,11 +56,13 @@ ifeq (1,$(TBB_NOSTRICT))
KNOWN_NOSTRICT += \
test_concurrent_hash_map.o \
test_concurrent_vector.o \
+ test_concurrent_queue.o \
test_handle_perror.o \
test_cache_aligned_allocator_STL.o \
test_task_scheduler_init.o \
test_model_plugin.o \
test_parallel_do.o \
+ test_eh_algorithms.o \
test_parallel_sort.o \
test_tbb_version.o
@@ -156,57 +160,52 @@ test_tbb_openmp: test_openmp.exe
endif
-test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
-
-ifndef norun
# Run tests that are in TEST_TBB_PLAIN.EXE
# The test are ordered so that simpler components are tested first.
# If a component Y uses component X, then tests for Y should come after tests for X.
-test_tbb_plain:
- ./test_assembly.exe
- ./test_compiler.exe
+# Note that usually run_cmd is empty, and tests run directly
+test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
+ $(run_cmd) ./test_assembly.exe
+ $(run_cmd) ./test_compiler.exe
# Yes, 4:8 is intended on the next line.
- ./test_yield.exe 4:8
- ./test_handle_perror.exe
- ./test_task_scheduler_init.exe 1:4
- ./test_task_scheduler_observer.exe 1:4
- ./test_task_assertions.exe
- ./test_task.exe 1:4
- ./test_task_leaks.exe
- ./test_atomic.exe
- ./test_cache_aligned_allocator.exe
- ./test_cache_aligned_allocator_STL.exe
- ./test_blocked_range.exe 1:4
- ./test_blocked_range2d.exe 1:4
- ./test_blocked_range3d.exe 1:4
- ./test_parallel_for.exe 1:4
- ./test_parallel_sort.exe 1:4
- ./test_aligned_space.exe
- ./test_parallel_reduce.exe 1:4
- ./test_parallel_scan.exe 1:4
- ./test_parallel_while.exe 1:4
- ./test_parallel_do.exe 1:4
- ./test_inits_loop.exe
- ./test_mutex.exe 1
- ./test_mutex.exe 2
- ./test_mutex.exe 4
- ./test_mutex_native_threads.exe 1
- ./test_mutex_native_threads.exe 2
- ./test_mutex_native_threads.exe 4
- ./test_rwm_upgrade_downgrade.exe 4
+ $(run_cmd) ./test_yield.exe 4:8
+ $(run_cmd) ./test_handle_perror.exe
+ $(run_cmd) ./test_task_scheduler_init.exe 1:4
+ $(run_cmd) ./test_task_scheduler_observer.exe 1:4
+ $(run_cmd) ./test_task_assertions.exe
+ $(run_cmd) ./test_task.exe 1:4
+ $(run_cmd) ./test_task_leaks.exe
+ $(run_cmd) ./test_atomic.exe
+ $(run_cmd) ./test_cache_aligned_allocator.exe
+ $(run_cmd) ./test_cache_aligned_allocator_STL.exe
+ $(run_cmd) ./test_blocked_range.exe 1:4
+ $(run_cmd) ./test_blocked_range2d.exe 1:4
+ $(run_cmd) ./test_blocked_range3d.exe 1:4
+ $(run_cmd) ./test_parallel_for.exe 1:4
+ $(run_cmd) ./test_parallel_sort.exe 1:4
+ $(run_cmd) ./test_aligned_space.exe
+ $(run_cmd) ./test_parallel_reduce.exe 1:4
+ $(run_cmd) ./test_parallel_scan.exe 1:4
+ $(run_cmd) ./test_parallel_while.exe 1:4
+ $(run_cmd) ./test_parallel_do.exe 1:4
+ $(run_cmd) ./test_inits_loop.exe
+ $(run_cmd) ./test_mutex.exe 1
+ $(run_cmd) ./test_mutex.exe 2
+ $(run_cmd) ./test_mutex.exe 4
+ $(run_cmd) ./test_mutex_native_threads.exe 1:4
+ $(run_cmd) ./test_rwm_upgrade_downgrade.exe 4
# Yes, 4:8 is intended on the next line.
- ./test_halt.exe 4:8
- ./test_pipeline.exe 1:4
- ./test_tick_count.exe 1:4
- ./test_concurrent_queue.exe 1:4
- ./test_concurrent_vector.exe 1:4
- ./test_concurrent_hash_map.exe 1:4
- ./test_model_plugin.exe 4
- ./test_tbb_version.exe
- ./test_eh_tasks.exe 2:4
- ./test_eh_algorithms.exe 2:4
- ./test_tbb_thread.exe
-endif # norun
+ $(run_cmd) ./test_halt.exe 4:8
+ $(run_cmd) ./test_pipeline.exe 1:4
+ $(run_cmd) ./test_tick_count.exe 1:4
+ $(run_cmd) ./test_concurrent_queue.exe 1:4
+ $(run_cmd) ./test_concurrent_vector.exe 1:4
+ $(run_cmd) ./test_concurrent_hash_map.exe 1:4
+ $(run_cmd) ./test_model_plugin.exe 4
+ $(run_cmd) ./test_tbb_version.exe
+ $(run_cmd) ./test_eh_tasks.exe 2:4
+ $(run_cmd) ./test_eh_algorithms.exe 2:4
+ $(run_cmd) ./test_tbb_thread.exe
TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ)
@@ -217,34 +216,27 @@ $(TEST_TBB_OLD.OBJ): %.$(OBJ): %.cpp
TEST_TBB_OLD.EXE = $(subst .$(OBJ),.exe,$(TEST_TBB_OLD.OBJ))
test_tbb_old: $(TEST_TBB_OLD.EXE)
-
-ifndef norun
-test_tbb_old:
- ./test_concurrent_vector_v2.exe 1:4
- ./test_concurrent_queue_v2.exe 1:4
- ./test_mutex_v2.exe 1
- ./test_mutex_v2.exe 2
- ./test_mutex_v2.exe 4
-endif # norun
-
-debug_%: test_%.exe
- $(debugger) ./$^ $(args)
-
-test_%: test_%.exe
- ./$^ $(args)
+ $(run_cmd) ./test_concurrent_vector_v2.exe 1:4
+ $(run_cmd) ./test_concurrent_queue_v2.exe 1:4
+ $(run_cmd) ./test_mutex_v2.exe 1
+ $(run_cmd) ./test_mutex_v2.exe 2
+ $(run_cmd) ./test_mutex_v2.exe 4
+
+test_% debug_%: test_%.exe
+ $(run_cmd) ./$^ $(args)
ifneq (,$(codecov))
profmerge
codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
endif
time_%: time_%.exe
- ./$^ $(args)
+ $(run_cmd) ./$^ $(args)
clean_%:
- $(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d
+ $(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d pgopti.* *.dyn
clean:
- $(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9]
+ $(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9]
# Include automatically generated dependences
-include *.d
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
index aa4efb0..fff7124 100644
--- a/build/SunOS.gcc.inc
+++ b/build/SunOS.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -24,7 +24,7 @@
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.
-COMPILE_ONLY = -c -MMD
+COMPILE_ONLY = -c -MMD
PREPROC_ONLY = -E -x c
INCLUDE_KEY = -I
DEFINE_KEY = -D
@@ -32,7 +32,7 @@ OUTPUT_KEY = -o #
OUTPUTOBJ_KEY = -o #
PIC_KEY = -fPIC
WARNING_AS_ERROR_KEY = -Werror
-WARNING_KEY =
+WARNING_KEY = -Wall
DYLIB_KEY = -shared
LIBDL = -ldl
@@ -47,7 +47,7 @@ ifeq ($(cfg), release)
CPLUS_FLAGS = -O2 -DUSE_PTHREAD
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = -DTBB_DO_ASSERT -g -O0 -DUSE_PTHREAD
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
endif
ASM=
@@ -70,6 +70,12 @@ ifeq (ia32,$(arch))
LIB_LINK_FLAGS += -m32
endif
+# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
+ifeq (sparc,$(arch))
+ CPLUS_FLAGS += -mcpu=v9 -m64
+ LIB_LINK_FLAGS += -mcpu=v9 -m64
+endif
+
#------------------------------------------------------------------------------
# Setting assembler data.
#------------------------------------------------------------------------------
diff --git a/build/SunOS.inc b/build/SunOS.inc
index 3d22f3d..1ca8dcb 100644
--- a/build/SunOS.inc
+++ b/build/SunOS.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,9 +25,17 @@
# the GNU General Public License.
ifndef arch
- ifeq ($(shell arch),i86pc)
- export arch:=ia32
+ arch:=$(shell uname -p)
+ ifeq ($(arch),i386)
+ ifeq ($(shell isainfo -b),64)
+ arch:=em64t
+ else
+ arch:=ia32
+ endif
endif
+ export arch
+# For non-IA systems running Sun OS, 'arch' will contain whatever is printed by uname -p.
+# In particular, for SPARC architecture it will contain "sparc".
endif
ifndef runtime
@@ -52,8 +60,8 @@ MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(CPLUS) $(CPLUS_FLAG
MAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh
ifeq ($(compiler),suncc)
- export TBB_CUSTOM_VARS_SH=CXXFLAGS="-I$(CWD)/include -library=stlport4 $(CXXFLAGS) -M$(CWD)/build/suncc.map.pause"
- export TBB_CUSTOM_VARS_CSH=CXXFLAGS "-I$(CWD)/include -library=stlport4 $(CXXFLAGS) -M$(CWD)/build/suncc.map.pause"
+ export TBB_CUSTOM_VARS_SH=CXXFLAGS="-I$(CWD)/../include -library=stlport4 $(CXXFLAGS) -M$(CWD)/../build/suncc.map.pause"
+ export TBB_CUSTOM_VARS_CSH=CXXFLAGS "-I$(CWD)/../include -library=stlport4 $(CXXFLAGS) -M$(CWD)/../build/suncc.map.pause"
endif
ifdef LD_LIBRARY_PATH
@@ -62,7 +70,7 @@ else
export LD_LIBRARY_PATH := .
endif
-####### Build settigns ########################################################
+####### Build settings ########################################################
OBJ = o
DLL = so
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
index 4f6829d..10f2ae3 100644
--- a/build/SunOS.suncc.inc
+++ b/build/SunOS.suncc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -33,8 +33,9 @@ OUTPUTOBJ_KEY = -o #
PIC_KEY = -KPIC
DYLIB_KEY = -G
LIBDL = -ldl
+# WARNING_AS_ERROR_KEY = -errwarn=%all
WARNING_AS_ERROR_KEY = Warning as error
-WARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg
+WARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem
tbb_strict=0
TBB_NOSTRICT = 1
@@ -47,10 +48,10 @@ LIBS = -lpthread -lrt -R .
C_FLAGS = $(CPLUS_FLAGS)
ifeq ($(cfg), release)
- CPLUS_FLAGS = -xO2 -library=stlport4 -DUSE_PTHREAD
+ CPLUS_FLAGS = -xO2 -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = -DTBB_DO_ASSERT -g -library=stlport4 -DUSE_PTHREAD
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
endif
ASM=
@@ -69,6 +70,13 @@ ifeq (ia32,$(arch))
LIB_LINK_FLAGS += -m32
endif
+# TODO: verify whether -m64 implies V9 on relevant Sun Studio versions
+# (those that handle gcc assembler syntax)
+ifeq (sparc,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
#------------------------------------------------------------------------------
# Setting assembler data.
#------------------------------------------------------------------------------
diff --git a/build/common.inc b/build/common.inc
index f1c57bc..4fbf5b7 100644
--- a/build/common.inc
+++ b/build/common.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -81,8 +81,8 @@ ifneq ($(BUILDING_PHASE),1)
work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)
ifneq ($(BUILDING_PHASE),0)
work_dir:=$(work_dir)
- # assign new value for tbb_root
- ifneq ($(firstword is_abs_path$(subst /, ,$(tbb_root))),is_abs_path)
+ # assign new value for tbb_root if path is not absolute (the filter keeps only /* paths)
+ ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
ifeq ($(origin_build_dir),undefined)
override tbb_root:=../..
else
diff --git a/build/common_rules.inc b/build/common_rules.inc
index f222ecb..db98d8f 100644
--- a/build/common_rules.inc
+++ b/build/common_rules.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -93,12 +93,23 @@ tbb_misc.$(OBJ): tbb_misc.cpp version_string.tmp
tbb_misc.E: tbb_misc.cpp version_string.tmp
$(CPLUS) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
-%.res: %.rc version_string.tmp
+%.res: %.rc version_string.tmp $(TBB.MANIFEST)
rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
-version_string.tmp:
- $(MAKE_VERSIONS)
-
tbbvars:
$(MAKE_TBBVARS)
+ifneq (,$(TBB.MANIFEST))
+$(TBB.MANIFEST):
+ cmd /C "echo int main(){return 0;} >tbbmanifest.c"
+ cl $(C_FLAGS) tbbmanifest.c
+
+version_string.tmp: $(TBB.MANIFEST)
+ $(MAKE_VERSIONS)
+ cmd /C "echo #define TBB_MANIFEST 1 >> version_string.tmp"
+
+else
+version_string.tmp:
+ $(MAKE_VERSIONS)
+endif
+
diff --git a/build/detect.js b/build/detect.js
index 89c8056..feebb99 100644
--- a/build/detect.js
+++ b/build/detect.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
index 7d218ed..9c13c87 100644
--- a/build/generate_tbbvars.bat
+++ b/build/generate_tbbvars.bat
@@ -1,6 +1,6 @@
@echo off
REM
-REM Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+REM Copyright 2005-2009 Intel Corporation. All Rights Reserved.
REM
REM This file is part of Threading Building Blocks.
REM
@@ -33,7 +33,7 @@ setlocal
for %%D in ("%tbb_root%") do set actual_root=%%~fD
if x%1==x goto without
-echo IF NOT DEFINED TBB21_INSTALL_DIR SET TBB21_INSTALL_DIR=%actual_root%>>tbbvars.bat
+echo SET TBB21_INSTALL_DIR=%actual_root%>>tbbvars.bat
echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
echo SET INCLUDE=%%TBB21_INSTALL_DIR%%\include;%%INCLUDE%%>>tbbvars.bat
echo SET LIB=%%TBB21_INSTALL_DIR%%\build\%1;%%LIB%%>>tbbvars.bat
@@ -43,9 +43,7 @@ if exist tbbvars.sh goto skipsh
set fslash_root=%actual_root:\=/%
echo Generating tbbvars.sh
echo #!/bin/sh>tbbvars.sh
-echo if [ -z "${TBB21_INSTALL_DIR}" ]; then>>tbbvars.sh
-echo export TBB21_INSTALL_DIR="%fslash_root%">>tbbvars.sh
-echo fi>>tbbvars.sh
+echo export TBB21_INSTALL_DIR="%fslash_root%">>tbbvars.sh
echo TBB_ARCH_PLATFORM="%arch%\%runtime%">>tbbvars.sh
echo if [ -z "${PATH}" ]; then>>tbbvars.sh
echo export PATH="${TBB21_INSTALL_DIR}/build/%1">>tbbvars.sh
@@ -67,9 +65,7 @@ echo fi>>tbbvars.sh
if exist tbbvars.csh goto skipcsh
echo Generating tbbvars.csh
echo #!/bin/csh>tbbvars.csh
-echo if (! $?TBB21_INSTALL_DIR) then>>tbbvars.csh
-echo setenv TBB21_INSTALL_DIR "%actual_root%">>tbbvars.csh
-echo endif>>tbbvars.csh
+echo setenv TBB21_INSTALL_DIR "%actual_root%">>tbbvars.csh
echo setenv TBB_ARCH_PLATFORM "%arch%\%runtime%">>tbbvars.csh
echo if (! $?PATH) then>>tbbvars.csh
echo setenv PATH "${TBB21_INSTALL_DIR}\build\%1">>tbbvars.csh
diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh
index 868fc7c..84a8c95 100644
--- a/build/generate_tbbvars.sh
+++ b/build/generate_tbbvars.sh
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -45,7 +45,7 @@ custom_exp_csh="setenv $TBB_CUSTOM_VARS_CSH" #
fi #
if [ -z "$1" ]; then # custom tbb_build_dir, can't make with TBB_INSTALL_DIR
[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <<EOF
-#!/bin/sh
+#!/bin/bash
tbb_root="${tbb_root}" #
tbb_bin="${bin_dir}" #
if [ -z "\$CPATH" ]; then #
@@ -88,8 +88,8 @@ ${custom_exp_csh} #
EOF
else # make with TBB_INSTALL_DIR
[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <<EOF
-#!/bin/sh
-[ -z "\${TBB21_INSTALL_DIR}" ] && export TBB21_INSTALL_DIR="${tbb_root}" #
+#!/bin/bash
+export TBB21_INSTALL_DIR="${tbb_root}" #
tbb_bin="\${TBB21_INSTALL_DIR}/build/$1" #
if [ -z "\$CPATH" ]; then #
export CPATH="\${TBB21_INSTALL_DIR}/include" #
@@ -110,9 +110,7 @@ ${custom_exp_sh} #
EOF
[ -f ./tbbvars.csh ] || cat >./tbbvars.csh <<EOF
#!/bin/csh
-if (! \$?TBB21_INSTALL_DIR) then #
- setenv TBB21_INSTALL_DIR "${tbb_root}" #
-endif #
+setenv TBB21_INSTALL_DIR "${tbb_root}" #
setenv tbb_bin "\${TBB21_INSTALL_DIR}/build/$1" #
if (! \$?CPATH) then #
setenv CPATH "\${TBB21_INSTALL_DIR}/include" #
diff --git a/build/index.html b/build/index.html
index c1e14ce..6b3435e 100644
--- a/build/index.html
+++ b/build/index.html
@@ -219,7 +219,7 @@ See the Makefile infrastructure files for examples.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<P></P>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<P></P>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
index 2a2644a..f233f57 100644
--- a/build/linux.gcc.inc
+++ b/build/linux.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -48,7 +48,7 @@ ifeq ($(cfg), release)
CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = -DTBB_DO_ASSERT -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD
endif
ASM=
@@ -71,6 +71,12 @@ ifeq (ia32,$(arch))
LIB_LINK_FLAGS += -m32
endif
+# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
+ifeq (sparc,$(arch))
+ CPLUS_FLAGS += -mcpu=v9 -m64
+ LIB_LINK_FLAGS += -mcpu=v9 -m64
+endif
+
#------------------------------------------------------------------------------
# Setting assembler data.
#------------------------------------------------------------------------------
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
index 3b0ef89..8e02c5e 100644
--- a/build/linux.icc.inc
+++ b/build/linux.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -45,7 +45,7 @@ CPLUS = icpc
ifeq (release,$(cfg))
CPLUS_FLAGS = -O2 -strict_ansi -DUSE_PTHREAD
else
-CPLUS_FLAGS = -O0 -g -strict_ansi -DUSE_PTHREAD -DTBB_DO_ASSERT
+CPLUS_FLAGS = -O0 -g -strict_ansi -DUSE_PTHREAD -DTBB_USE_DEBUG
endif
ifneq (,$(codecov))
diff --git a/build/linux.inc b/build/linux.inc
index e84b192..7714688 100644
--- a/build/linux.inc
+++ b/build/linux.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,15 +25,19 @@
# the GNU General Public License.
ifndef arch
- ifeq ($(shell uname -m),i686)
+ uname_m:=$(shell uname -m)
+ ifeq ($(uname_m),i686)
export arch:=ia32
endif
- ifeq ($(shell uname -m),ia64)
+ ifeq ($(uname_m),ia64)
export arch:=itanium
endif
- ifeq ($(shell uname -m),x86_64)
+ ifeq ($(uname_m),x86_64)
export arch:=em64t
endif
+ ifeq ($(uname_m),sparc64)
+ export arch:=sparc
+ endif
endif
ifndef runtime
@@ -67,7 +71,7 @@ else
export LD_LIBRARY_PATH := .
endif
-####### Build settigns ########################################################
+####### Build settings ########################################################
OBJ = o
DLL = so
@@ -87,6 +91,12 @@ MALLOC_NO_VERSION.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
MALLOC.DEF = $(MALLOC_ROOT)/lin-tbbmalloc-export.def
MALLOC.DLL = $(MALLOC_NO_VERSION.DLL).$(SONAME_SUFFIX)
MALLOC.LIB = $(MALLOC_NO_VERSION.DLL)
+LINK_MALLOC.LIB = $(MALLOC_NO_VERSION.DLL)
+
+MALLOCPROXY_NO_VERSION.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def
+MALLOCPROXY.DLL = $(MALLOCPROXY_NO_VERSION.DLL).$(SONAME_SUFFIX)
+
TBB_NOSTRICT=1
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
index 5f61951..7fe6ed7 100644
--- a/build/macos.gcc.inc
+++ b/build/macos.gcc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -46,7 +46,7 @@ C_FLAGS = $(CPLUS_FLAGS) -x c
ifeq ($(cfg), release)
CPLUS_FLAGS = -O2
else
- CPLUS_FLAGS = -g -O0 -DTBB_DO_ASSERT
+ CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
endif
CPLUS_FLAGS += -DUSE_PTHREAD
@@ -58,9 +58,15 @@ ifeq (em64t,$(arch))
endif
ifeq (ppc64,$(arch))
- CPLUS_FLAGS += -m64
- LINK_FLAGS += -m64
- LIB_LINK_FLAGS += -m64
+ CPLUS_FLAGS += -arch ppc64
+ LINK_FLAGS += -arch ppc64
+ LIB_LINK_FLAGS += -arch ppc64
+endif
+
+ifeq (ppc,$(arch))
+ CPLUS_FLAGS += -arch ppc
+ LINK_FLAGS += -arch ppc
+ LIB_LINK_FLAGS += -arch ppc
endif
#------------------------------------------------------------------------------
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
index af0219f..243b6d5 100644
--- a/build/macos.icc.inc
+++ b/build/macos.icc.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -49,7 +49,7 @@ C_FLAGS = $(CPLUS_FLAGS) -x c
ifeq ($(cfg), release)
CPLUS_FLAGS = -O2 -fno-omit-frame-pointer
else
- CPLUS_FLAGS = -g -O0 -DTBB_DO_ASSERT
+ CPLUS_FLAGS = -g -O0 -DTBB_USE_DEBUG
endif
CPLUS_FLAGS += -DUSE_PTHREAD
diff --git a/build/macos.inc b/build/macos.inc
index 46700ef..5106529 100644
--- a/build/macos.inc
+++ b/build/macos.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -63,7 +63,7 @@ SLASH=/
MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
-####### Build settigns ########################################################
+####### Build settings ########################################################
OBJ=o
DLL=dylib
diff --git a/build/test_launcher.sh b/build/test_launcher.sh
index 0d7f87b..247e1dd 100644
--- a/build/test_launcher.sh
+++ b/build/test_launcher.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
diff --git a/build/version_info_linux.sh b/build/version_info_linux.sh
index 8e8d715..87d7551 100644
--- a/build/version_info_linux.sh
+++ b/build/version_info_linux.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,13 +28,14 @@
# Script used to generate version info string
echo "#define __TBB_VERSION_STRINGS \\"
-echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
-echo '"TBB:' "BUILD_OS\t\t"`head -1 /etc/issue | sed -e 's/\\\\//g'`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -rv`'" ENDL \'
+echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`uname -m`")"'" ENDL \'
+# find OS name in *-release and issue* files by filtering blank lines and lsb-release content out
+echo '"TBB:' "BUILD_OS\t\t"`lsb_release -sd 2>/dev/null | grep -ih '[a-z] ' - /etc/*release /etc/issue 2>/dev/null | head -1 | sed -e 's/["\\\\]//g'`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
echo '"TBB:' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
echo '"TBB:' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
-echo '"TBB:' "BUILD_LD\t\t"`ld -v | grep 'version'`'" ENDL \'
+echo '"TBB:' "BUILD_LD\t\t"`ld -v 2>&1 | grep 'version'`'" ENDL \'
echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
echo ""
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
index 6a7e385..d6a40af 100644
--- a/build/version_info_macos.sh
+++ b/build/version_info_macos.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -29,10 +29,10 @@
# Script used to generate version info string
echo "#define __TBB_VERSION_STRINGS \\"
echo '"TBB:' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -rv`'" ENDL \'
+echo '"TBB:' "BUILD_OS\t\t"`sw_vers -productName`" version "`sw_vers -productVersion`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -v`'" ENDL \'
echo '"TBB:' "BUILD_GCC\t\t"`gcc -v </dev/null 2>&1 | grep 'version'`'" ENDL \'
[ -z "$COMPILER_VERSION" ] || echo '"TBB:' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
-echo '"TBB:' "BUILD_LD\t\t"`ld -v | grep 'version'`'" ENDL \'
echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
echo '"TBB:' "BUILD_COMMAND\t"$*'" ENDL \'
echo ""
diff --git a/build/version_info_sunos.sh b/build/version_info_sunos.sh
index daa1701..1634116 100644
--- a/build/version_info_sunos.sh
+++ b/build/version_info_sunos.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -30,7 +30,7 @@
echo "#define __TBB_VERSION_STRINGS \\"
echo '"TBB:' "BUILD_HOST\t"`hostname`" ("`arch`")"'" ENDL \'
echo '"TBB:' "BUILD_OS\t\t"`uname`'" ENDL \'
-echo '"TBB:' "BUILD_KERNEL\t"`uname -rv`'" ENDL \'
+echo '"TBB:' "BUILD_KERNEL\t"`uname -srv`'" ENDL \'
echo '"TBB:' "BUILD_SUNCC\t"`CC -V </dev/null 2>&1 | grep 'C++'`'" ENDL \'
[ -z "$COMPILER_VERSION" ] || echo '"TBB: ' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
echo '"TBB:' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
index 00e0039..bb36001 100644
--- a/build/version_info_windows.js
+++ b/build/version_info_windows.js
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
index 4fdbea2..e0f10b9 100644
--- a/build/windows.cl.inc
+++ b/build/windows.cl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -34,20 +34,19 @@
#------------------------------------------------------------------------------
CPLUS = cl /nologo
LINK_FLAGS = /link /nologo
-LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no
+LIB_LINK_FLAGS=/link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
EH_FLAGS = /EHsc /GR
-
+
ifeq ($(cfg), release)
- CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope
+ CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
ASM_FLAGS =
ifeq (ia32,$(arch))
CPLUS_FLAGS += /Oy
endif
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope \
- /DTBB_DO_ASSERT
+ CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG
ASM_FLAGS = /DUSE_FRAME_POINTER
endif
@@ -59,12 +58,19 @@ DEFINE_KEY = /D
OUTPUT_KEY = /Fe
OUTPUTOBJ_KEY = /Fo
WARNING_AS_ERROR_KEY = /WX
-WARNING_KEY = /W3
+
+ifeq ($(runtime),vc7.1)
+ WARNING_KEY = /W3
+else
+ WARNING_KEY = /W4
+endif
+
DYLIB_KEY = /DLL
EXPORT_KEY = /DEF:
ifeq ($(runtime),vc8)
OPENMP_FLAG = /openmp
+ WARNING_KEY += /Wp64
endif
ifeq ($(runtime),vc9)
OPENMP_FLAG = /openmp
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
index 71014e1..83c4a20 100644
--- a/build/windows.icl.inc
+++ b/build/windows.icl.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -43,20 +43,19 @@ cfg ?= release
#------------------------------------------------------------------------------
CPLUS = icl /nologo $(VCCOMPAT_FLAG)
LINK_FLAGS = /link /nologo
-LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no
+LIB_LINK_FLAGS= /link /nologo /DLL /MAP /DEBUG /fixed:no /INCREMENTAL:NO
MS_CRT_KEY = /MD$(if $(findstring debug,$(cfg)),d)
EH_FLAGS = /EHsc /GR
ifeq ($(cfg), release)
- CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope
+ CPLUS_FLAGS = $(MS_CRT_KEY) /O2 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t
ASM_FLAGS =
ifeq (ia32,$(arch))
CPLUS_FLAGS += /Oy
endif
endif
ifeq ($(cfg), debug)
- CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope \
- /DTBB_DO_ASSERT
+ CPLUS_FLAGS = $(MS_CRT_KEY) /Od /Ob0 /Zi $(EH_FLAGS) /Zc:forScope /Zc:wchar_t /DTBB_USE_DEBUG
LINK_FLAGS += libmmds.lib /NODEFAULTLIB:libmmdd.lib
ASM_FLAGS = /DUSE_FRAME_POINTER
endif
diff --git a/build/windows.inc b/build/windows.inc
index d2508ba..ddb6bf9 100644
--- a/build/windows.inc
+++ b/build/windows.inc
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -65,14 +65,22 @@ TBB.DEF = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.def
TBB.DLL = tbb$(DEBUG_SUFFIX).$(DLL)
TBB.LIB = tbb$(DEBUG_SUFFIX).$(LIBEXT)
TBB.RES = tbb_resource.res
-#On Windows we specify appropriate tbb library using #pragma comment
-LINK_TBB.LIB =
+# On Windows, we use #pragma comment to set the proper TBB lib to link with
+# But for cross-configuration testing, need to link explicitly
+LINK_TBB.LIB = $(if $(crosstest),$(TBB.LIB))
+TBB.MANIFEST =
+ifneq ($(runtime),vc7.1)
+TBB.MANIFEST = tbbmanifest.exe.manifest
+endif
MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).$(DLL)
MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)
MALLOC.RES = tbbmalloc.res
+MALLOC.MANIFEST =
+ifneq ($(runtime),vc7.1)
+MALLOC.MANIFEST = tbbmanifest.exe.manifest
+endif
MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(compiler) $(arch) $(subst \,/,"$(CPLUS) $(CPLUS_FLAGS) $(INCLUDES)") > version_string.tmp
MAKE_TBBVARS = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
-
diff --git a/doc/Release_Notes.txt b/doc/Release_Notes.txt
index 216356a..f5eebf5 100644
--- a/doc/Release_Notes.txt
+++ b/doc/Release_Notes.txt
@@ -61,16 +61,17 @@ Software - Supported Operating Systems
Microsoft* Windows* XP Professional
Microsoft* Windows* Server 2003
Microsoft* Windows* Vista
+ Microsoft* Windows* Server 2008
Linux* Systems
Red Hat* Enterprise Linux* 3, 4, 5
(when using Red Hat* Enterprise Linux* 4 with Intel(R)
Itanium(R) processors, operating system Update 2 or higher
is recommended)
- Red Hat* Fedora* Core 5, Core 6, 7, 8
+ Red Hat* Fedora* Core 8, 9, 10
(not with Intel(R) Itanium(R) processors)
Asianux* 3.0
Debian* GNU/Linux* 4.0
- Ubuntu* 7.04, 7.10
+ Ubuntu* 7.04, 7.10, 8.04, 8.10
SuSE* Linux* Enterprise Server (SLES) 9, 10
SGI* Propack* 4.0 (with Intel(R) Itanium(R) processors only)
SGI* Propack* 5.0 (not with IA-32 architecture processors)
@@ -90,7 +91,7 @@ Software - Supported Compilers
Intel(R) C++ Compiler 10.0 or higher
For each supported Linux* operating system, the standard gcc
version provided with that operating system is supported,
- including: 3.2, 3.3, 3.4, 4.0, 4.1
+ including gcc 3.2 through 4.3
For each supported Mac OS* X operating system, the standard gcc
version provided with that operating system is supported,
including: 4.0.1 (Xcode* tool suite 2.4.1 or higher)
@@ -143,9 +144,20 @@ Library Issues
https://bugs.launchpad.net/ubuntu/+source/gcc-4.1/+bug/77559
+ - By default, Ubuntu* in 64-bit mode does not install packages
+ required to compile 32-bit applications. Trying to compile 32-bit
+ applications (including TBB examples), you may get errors like:
+ /usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
+ /usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
+ /usr/bin/ld: cannot find -lpthread
+ or
+ /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
+ In order to overcome the issue, additional packages should be
+ installed, such as gcc-multilib, ia32-libs, and others.
+ Refer to your provider of Ubuntu distribution for more details.
------------------------------------------------------------------------
-Copyright (C) 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright (C) 2005-2009 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00001.html b/doc/html/a00001.html
index 97ab900..8f7052c 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00001.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00164.html#a0">begin</a>()</td><td><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00164.html#a1">end</a>()</td><td><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00190.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00190.html#a0">begin</a>()</td><td><a class="el" href="a00190.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00190.html#a1">end</a>()</td><td><a class="el" href="a00190.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00013.html b/doc/html/a00013.html
deleted file mode 100644
index 5bb736f..0000000
--- a/doc/html/a00013.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00169.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00169.html#a2">begin</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a0">blocked_range</a>()</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a1">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a8">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b> (defined in <a class="el" href="a00169.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b> (defined in <a class="el" href="a00169.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#w0">const_iterator</a> typedef</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a6">empty</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a3">end</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a5">grainsize</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a7">is_divisible</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#a4">size</a>() const </td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00169.html#w1">size_type</a> typedef</td><td><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00014.html b/doc/html/a00014.html
deleted file mode 100644
index 4c81707..0000000
--- a/doc/html/a00014.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(blocked_range2d &r, split) (defined in <a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00170.html#a6">cols</a>() const </td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00170.html#a2">empty</a>() const </td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00170.html#a3">is_divisible</a>() const </td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00170.html#w0">row_range_type</a> typedef</td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00170.html#a5">rows</a>() const </td><td><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00015.html b/doc/html/a00015.html
index c03f681..515e7d1 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00015.html
@@ -4,22 +4,24 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d [...]
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a7">cols</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a2">empty</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a3">is_divisible</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#w0">page_range_type</a> typedef</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a5">pages</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>row_range_type</b> typedef (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a6">rows</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range< Value > Member List</h1>This is the complete list of members for <a class="el" href="a00195.html">tbb::blocked_range< Value ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a2">begin</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a0">blocked_range</a>()</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a1">blocked_range</a>(Value begin_, Value end_, size_type grainsize_=1)</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a8">blocked_range</a>(blocked_range &r, split)</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b> (defined in <a class="el" href="a00195.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b> (defined in <a class="el" href="a00195.html">tbb::blocked_range< Value ></a>)</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#w0">const_iterator</a> typedef</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a6">empty</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a3">end</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a5">grainsize</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a7">is_divisible</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#a4">size</a>() const </td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00195.html#w1">size_type</a> typedef</td><td><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00016.html b/doc/html/a00016.html
index fa374e6..8708ec4 100644
--- a/doc/html/a00016.html
+++ b/doc/html/a00016.html
@@ -4,28 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00172.html#a5">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>() (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator &) (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator< U > &) (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00172.html#a8">construct</a>(pointer p, const T &value)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00172.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00172.html#a9">destroy</a>(pointer p)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00172.html#a7">max_size</a>() const </td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range2d< RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range2d</b>(blocked_range2d &r, split) (defined in <a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>)</td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00196.html#a6">cols</a>() const </td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00196.html#a2">empty</a>() const </td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00196.html#a3">is_divisible</a>() const </td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00196.html#w0">row_range_type</a> typedef</td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00196.html#a5">rows</a>() const </td><td><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00015.html b/doc/html/a00017.html
similarity index 65%
copy from doc/html/a00015.html
copy to doc/html/a00017.html
index c03f681..6c8771a 100644
--- a/doc/html/a00015.html
+++ b/doc/html/a00017.html
@@ -4,22 +4,22 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d [...]
- <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a7">cols</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a2">empty</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a3">is_divisible</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#w0">page_range_type</a> typedef</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a5">pages</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>row_range_type</b> typedef (defined in <a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00171.html#a6">rows</a>() const </td><td><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Member List</h1>This is the complete list of members for <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end) (defined in <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize, RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize, ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize) (defined in <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00197.html">tbb::blocked_range3d [...]
+ <tr bgcolor="#f0f0f0"><td><b>blocked_range3d</b>(blocked_range3d &r, split) (defined in <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>col_range_type</b> typedef (defined in <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#a7">cols</a>() const </td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#a2">empty</a>() const </td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#a3">is_divisible</a>() const </td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#w0">page_range_type</a> typedef</td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#a5">pages</a>() const </td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>row_range_type</b> typedef (defined in <a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>)</td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00197.html#a6">rows</a>() const </td><td><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00018.html b/doc/html/a00018.html
index a70d90f..113b490 100644
--- a/doc/html/a00018.html
+++ b/doc/html/a00018.html
@@ -4,14 +4,28 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::cache_aligned_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00198.html#a5">allocate</a>(size_type n, const void *hint=0)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>() (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator &) (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>cache_aligned_allocator</b>(const cache_aligned_allocator< U > &) (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00198.html#a8">construct</a>(pointer p, const T &value)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00198.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00198.html#a9">destroy</a>(pointer p)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00198.html#a7">max_size</a>() const </td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>)</td><td><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00020.html b/doc/html/a00020.html
index 69d63d9..b821045 100644
--- a/doc/html/a00020.html
+++ b/doc/html/a00020.html
@@ -4,18 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_base Member List</h1>This is the complete list of members for <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>chain_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#w3">hashcode_t</a> typedef</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s2">max_physical_size</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s1">n_segment</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s0">n_segment_bits</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>node_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::cache_aligned_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a>)</td><td><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00022.html b/doc/html/a00022.html
index 7ef9489..467fb64 100644
--- a/doc/html/a00022.html
+++ b/doc/html/a00022.html
@@ -4,29 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00196.html#a0">hash_map_iterator</a>()</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>hash_map_iterator</b>(const hash_map_iterator< Container, typename Container::value_type > &other) (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator_category</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator *</b>() const (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator++</b>() (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00196.html#a5">operator++</a>(int)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::concurrent_hash_map</b> (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_base Member List</h1>This is the complete list of members for <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>chain_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#w3">hashcode_t</a> typedef</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s2">max_physical_size</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s1">n_segment</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s0">n_segment_bits</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>node_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00023.html b/doc/html/a00023.html
deleted file mode 100644
index e78b26c..0000000
--- a/doc/html/a00023.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_range< Iterator > Member List</h1>This is the complete list of members for <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a0">empty</a>() const </td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a7">grainsize</a>() const </td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>hash_map_range</b> (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a2">hash_map_range</a>(hash_map_range &r, split)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a3">hash_map_range</a>(hash_map_range< U > &r)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a4">hash_map_range</a>(const Iterator &begin_, const Iterator &end_, size_type grainsize=1)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#a1">is_divisible</a>() const </td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00197.html#w0">size_type</a> typedef</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00024.html b/doc/html/a00024.html
index b1f97a9..73f5184 100644
--- a/doc/html/a00024.html
+++ b/doc/html/a00024.html
@@ -4,69 +4,24 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>chain</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>chain_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a4">clear</a>()</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a0">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a1">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a2">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a19">count</a>(const Key &key) const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a15">empty</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a28">erase</a>(const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a29">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a30">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a20">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a21">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a17">get_allocator</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#w3">hashcode_t</a> typedef</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a22">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a23">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a24">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a25">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a26">insert</a>(const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a27">insert</a>(I first, I last)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s2">max_physical_size</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a16">max_size</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s1">n_segment</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s0">n_segment_bits</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>node</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>node_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a3">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a14">size</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a18">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a5">~concurrent_hash_map</a>()</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>hash_map_iterator</b>(const Container &table, size_t segment_index, size_t array_index=0, node *b=NULL) (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00223.html#a1">hash_map_iterator</a>()</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>hash_map_iterator</b>(const hash_map_iterator< Container, typename Container::value_type > &other) (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator *</b>() const (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator++</b>() (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00223.html#a6">operator++</a>(int)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::concurrent_hash_map</b> (defined in <a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00025.html b/doc/html/a00025.html
index d2c1532..f00a7d4 100644
--- a/doc/html/a00025.html
+++ b/doc/html/a00025.html
@@ -4,20 +4,25 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map</b> (defined in <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a4">const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a0">empty</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a2">operator *</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a3">operator-></a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a1">release</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#w0">value_type</a> typedef</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_range< Iterator > Member List</h1>This is the complete list of members for <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a0">empty</a>() const </td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a7">grainsize</a>() const </td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>hash_map_range</b> (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a2">hash_map_range</a>(hash_map_range &r, split)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a3">hash_map_range</a>(hash_map_range< U > &r)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a4">hash_map_range</a>(const Iterator &begin_, const Iterator &end_, size_type grainsize=1)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#a1">is_divisible</a>() const </td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00224.html#w0">size_type</a> typedef</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00026.html b/doc/html/a00026.html
index a5c19a5..f27173f 100644
--- a/doc/html/a00026.html
+++ b/doc/html/a00026.html
@@ -4,18 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00176.html#a4">const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a0">empty</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#a0">operator *</a>() const </td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#a1">operator-></a>() const </td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a1">release</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#w0">value_type</a> typedef</td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_hash_compare< T > Member List</h1>This is the complete list of members for <a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>equal</b>(const T &a, const T &b) (defined in <a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a>)</td><td><a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>hash</b>(const T &t) (defined in <a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a>)</td><td><a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a></td><td><code> [inline, static]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00024.html b/doc/html/a00027.html
similarity index 53%
copy from doc/html/a00024.html
copy to doc/html/a00027.html
index b1f97a9..87b6716 100644
--- a/doc/html/a00024.html
+++ b/doc/html/a00027.html
@@ -4,69 +4,69 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>chain</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>chain_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a4">clear</a>()</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a0">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a1">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a2">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a19">count</a>(const Key &key) const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a15">empty</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a28">erase</a>(const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a29">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a30">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a20">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a21">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a17">get_allocator</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#w3">hashcode_t</a> typedef</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a22">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a23">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a24">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a25">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a26">insert</a>(const value_type &value)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a27">insert</a>(I first, I last)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s2">max_physical_size</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a16">max_size</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s1">n_segment</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00195.html#s0">n_segment_bits</a></td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>node</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>node_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a3">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) const (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment</b> (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_mutex_t</b> typedef (defined in <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a14">size</a>() const </td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a18">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00174.html#a5">~concurrent_hash_map</a>()</td><td><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A > Member List</h1>This is the complete list of members for <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>chain</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>chain_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a4">clear</a>()</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a0">concurrent_hash_map</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a1">concurrent_hash_map</a>(const concurrent_hash_map &table, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a2">concurrent_hash_map</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_accessor</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a19">count</a>(const Key &key) const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a15">empty</a>() const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>equal_range</b>(const Key &key) const (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a28">erase</a>(const Key &key)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a29">erase</a>(const_accessor &item_accessor)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a30">erase</a>(accessor &item_accessor)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a20">find</a>(const_accessor &result, const Key &key) const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a21">find</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a17">get_allocator</a>() const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#w3">hashcode_t</a> typedef</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a22">insert</a>(const_accessor &result, const Key &key)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a23">insert</a>(accessor &result, const Key &key)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a24">insert</a>(const_accessor &result, const value_type &value)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a25">insert</a>(accessor &result, const value_type &value)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a26">insert</a>(const value_type &value)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a27">insert</a>(I first, I last)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_iterator</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::hash_map_range</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>key_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>mapped_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s2">max_physical_size</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a16">max_size</a>() const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s1">n_segment</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00222.html#s0">n_segment_bits</a></td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>node</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>node_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a3">operator=</a>(const concurrent_hash_map &table)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>range</b>(size_type grainsize=1) const (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment</b> (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_mutex_t</b> typedef (defined in <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>)</td><td><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a14">size</a>() const </td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a18">swap</a>(concurrent_hash_map &table)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>)</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00201.html#a5">~concurrent_hash_map</a>()</td><td><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00025.html b/doc/html/a00028.html
similarity index 58%
copy from doc/html/a00025.html
copy to doc/html/a00028.html
index d2c1532..00a2dc3 100644
--- a/doc/html/a00025.html
+++ b/doc/html/a00028.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map</b> (defined in <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a4">const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a0">empty</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a2">operator *</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a3">operator-></a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a1">release</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#w0">value_type</a> typedef</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Member List</h1>This is the complete list of members for <a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>accessor</b> (defined in <a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_hash_map<Key,T,HashCompare,A></b> (defined in <a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>)</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a4">const_accessor</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a0">empty</a>() const </td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a2">operator *</a>() const </td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a3">operator-></a>() const </td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a1">release</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#w0">value_type</a> typedef</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00026.html b/doc/html/a00029.html
similarity index 64%
copy from doc/html/a00026.html
copy to doc/html/a00029.html
index a5c19a5..f423ace 100644
--- a/doc/html/a00026.html
+++ b/doc/html/a00029.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00176.html#a4">const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a0">empty</a>() const </td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#a0">operator *</a>() const </td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#a1">operator-></a>() const </td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a1">release</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00175.html#w0">value_type</a> typedef</td><td><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00176.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Member List</h1>This is the complete list of members for <a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a4">const_accessor</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a0">empty</a>() const </td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00202.html#a0">operator *</a>() const </td><td><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00202.html#a1">operator-></a>() const </td><td><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a1">release</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00202.html#w0">value_type</a> typedef</td><td><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00203.html#a5">~const_accessor</a>()</td><td><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00030.html b/doc/html/a00030.html
deleted file mode 100644
index 563b2c6..0000000
--- a/doc/html/a00030.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00178.html#b8">allocate_page</a>()=0</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, pure virtual]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_base_v3</b>(size_t item_size) (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator_base_v3</b> (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator_rep</b> (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_rep</b> (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b9">deallocate_page</a>(page *p)=0</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, pure virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b10">internal_finish_clear</a>()</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b3">internal_pop</a>(void *dst)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b5">internal_pop_if_present</a>(void *dst)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b2">internal_push</a>(const void *src)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b4">internal_push_if_not_full</a>(const void *src)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b7">internal_set_capacity</a>(ptrdiff_t capacity, size_t element_size)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b6">internal_size</a>() const </td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b11">internal_throw_exception</a>() const </td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p2">item_size</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p1">items_per_page</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>micro_queue</b> (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>micro_queue_pop_finalizer</b> (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p0">my_capacity</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~concurrent_queue_base_v3</b>() (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00031.html b/doc/html/a00031.html
deleted file mode 100644
index fa2b7cd..0000000
--- a/doc/html/a00031.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_base_v3::page Member List</h1>This is the complete list of members for <a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>mask</b> (defined in <a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a>)</td><td><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a>)</td><td><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00033.html b/doc/html/a00033.html
index 6a478a7..6ee0444 100644
--- a/doc/html/a00033.html
+++ b/doc/html/a00033.html
@@ -4,26 +4,33 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>::tbb::concurrent_queue</b> (defined in <a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b4">advance</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b3">assign</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator</b>() (defined in <a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00180.html#a1">concurrent_queue_iterator</a>(const concurrent_queue_iterator< Container, typename Container::value_type > &other)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b0">concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b1">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b2">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_base &queue)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#p0">my_item</a></td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [mutable, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00180.html#a3">operator *</a>() const </td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00180.html#a5">operator++</a>()</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00180.html#a6">operator++</a>(int)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00180.html#a2">operator=</a>(const concurrent_queue_iterator &other)</td><td><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b5">~concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b8">allocate_page</a>()=0</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b12">assign</a>(const concurrent_queue_base_v3 &src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_base_v3</b>(size_t item_size) (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator_base_v3</b> (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator_rep</b> (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_rep</b> (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b9">deallocate_page</a>(page *p)=0</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b10">internal_finish_clear</a>()</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b3">internal_pop</a>(void *dst)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b5">internal_pop_if_present</a>(void *dst)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b2">internal_push</a>(const void *src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b4">internal_push_if_not_full</a>(const void *src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b7">internal_set_capacity</a>(ptrdiff_t capacity, size_t element_size)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b6">internal_size</a>() const </td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b11">internal_throw_exception</a>() const </td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p2">item_size</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p1">items_per_page</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>micro_queue</b> (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>micro_queue_pop_finalizer</b> (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p0">my_capacity</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~concurrent_queue_base_v3</b>() (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00034.html b/doc/html/a00034.html
index 7fbea09..cffa93c 100644
--- a/doc/html/a00034.html
+++ b/doc/html/a00034.html
@@ -4,49 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00177.html#w1">allocator_type</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a8">capacity</a>() const </td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a11">clear</a>()</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a0">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_base_v3</b>(size_t item_size) (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#w3">const_reference</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#w5">difference_type</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a7">empty</a>() const </td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a10">get_allocator</a>() const </td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b10">internal_finish_clear</a>()</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b3">internal_pop</a>(void *dst)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b5">internal_pop_if_present</a>(void *dst)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b2">internal_push</a>(const void *src)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b4">internal_push_if_not_full</a>(const void *src)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b7">internal_set_capacity</a>(ptrdiff_t capacity, size_t element_size)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b6">internal_size</a>() const </td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#b11">internal_throw_exception</a>() const </td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p2">item_size</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p1">items_per_page</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00178.html#p0">my_capacity</a></td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a3">pop</a>(T &destination)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a5">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a2">push</a>(const T &source)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a4">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#w2">reference</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a9">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a6">size</a>() const </td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#w4">size_type</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#w0">value_type</a> typedef</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00177.html#a1">~concurrent_queue</a>()</td><td><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~concurrent_queue_base_v3</b>() (defined in <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_base_v3::page Member List</h1>This is the complete list of members for <a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>mask</b> (defined in <a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a>)</td><td><a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>next</b> (defined in <a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a>)</td><td><a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00032.html b/doc/html/a00035.html
similarity index 63%
rename from doc/html/a00032.html
rename to doc/html/a00035.html
index 1a9c04a..2c5c8eb 100644
--- a/doc/html/a00032.html
+++ b/doc/html/a00035.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_iterator_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00181.html#b4">advance</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b3">assign</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b0">concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b1">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b2">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_base &queue)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#p0">my_item</a></td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [mutable, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a>)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a>)</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00181.html#b5">~concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_iterator_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b4">advance</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b3">assign</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b0">concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b1">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b2">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_base &queue)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#p0">my_item</a></td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [mutable, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator!=</b> (defined in <a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a>)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a>)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b5">~concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00036.html b/doc/html/a00036.html
index 73f6048..e170da1 100644
--- a/doc/html/a00036.html
+++ b/doc/html/a00036.html
@@ -4,42 +4,27 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_vector_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>default_initial_segments</b> enum value (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>helper</b> (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x2">internal_array_op1</a> typedef</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x3">internal_array_op2</a> typedef</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_assign</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_capacity</b>() const (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_clear</b>(internal_array_op1 destroy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_compact</b>(size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow</b>(size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow_by</b>(size_type delta, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow_to_at_least</b>(size_type new_size, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_push_back</b>(size_type element_size, size_type &index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(size_type n, size_type element_size, size_type max_size) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_swap</b>(concurrent_vector_base_v3 &v) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_throw_exception</b>(size_type) const (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p2">my_early_size</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p1">my_first_block</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p3">my_segment</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p4">my_storage</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointers_per_long_table</b> enum value (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x7x5">pointers_per_short_table</a> enum value</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_base</b>(segment_index_t k) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_base_index_of</b>(segment_index_t &index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_index_of</b>(size_type index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_index_t</b> typedef (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_size</b>(segment_index_t k) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p0">vector_allocator_ptr</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>::tbb::concurrent_queue</b> (defined in <a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b4">advance</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b3">assign</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a0">concurrent_queue_iterator</a>(const concurrent_queue_base &queue)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_iterator</b>() (defined in <a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a2">concurrent_queue_iterator</a>(const concurrent_queue_iterator< Container, typename Container::value_type > &other)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b0">concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b1">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_iterator_base_v3 &i)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b2">concurrent_queue_iterator_base_v3</a>(const concurrent_queue_base &queue)</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#p0">my_item</a></td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [mutable, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a4">operator *</a>() const </td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a6">operator++</a>()</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a7">operator++</a>(int)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00207.html#a3">operator=</a>(const concurrent_queue_iterator &other)</td><td><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00208.html#b5">~concurrent_queue_iterator_base_v3</a>()</td><td><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td><code> [protected]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00037.html b/doc/html/a00037.html
new file mode 100644
index 0000000..0e1d1c5
--- /dev/null
+++ b/doc/html/a00037.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_queue< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w1">allocator_type</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b12">assign</a>(const concurrent_queue_base_v3 &src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b>() (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b>() const (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a8">capacity</a>() const </td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a11">clear</a>()</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a0">concurrent_queue</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a16">concurrent_queue</a>(const concurrent_queue &src, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a17">concurrent_queue</a>(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_queue_base_v3</b>(size_t item_size) (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w3">const_reference</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w5">difference_type</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a7">empty</a>() const </td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>end</b>() (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>end</b>() const (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a10">get_allocator</a>() const </td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::concurrent_queue_iterator</b> (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b10">internal_finish_clear</a>()</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b3">internal_pop</a>(void *dst)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b5">internal_pop_if_present</a>(void *dst)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b2">internal_push</a>(const void *src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b4">internal_push_if_not_full</a>(const void *src)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b7">internal_set_capacity</a>(ptrdiff_t capacity, size_t element_size)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b6">internal_size</a>() const </td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#b11">internal_throw_exception</a>() const </td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p2">item_size</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p1">items_per_page</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00205.html#p0">my_capacity</a></td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a3">pop</a>(T &destination)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a5">pop_if_present</a>(T &destination)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a2">push</a>(const T &source)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a4">push_if_not_full</a>(const T &source)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w2">reference</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a9">set_capacity</a>(size_type capacity)</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a6">size</a>() const </td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w4">size_type</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#w0">value_type</a> typedef</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00204.html#a1">~concurrent_queue</a>()</td><td><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~concurrent_queue_base_v3</b>() (defined in <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>)</td><td><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td><code> [protected, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00038.html b/doc/html/a00038.html
deleted file mode 100644
index 9cad933..0000000
--- a/doc/html/a00038.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_vector_base_v3::internal_segments_table Member List</h1>This is the complete list of members for <a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>first_block</b> (defined in <a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>)</td><td><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>table</b> (defined in <a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>)</td><td><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00039.html b/doc/html/a00039.html
index d7228b2..3765004 100644
--- a/doc/html/a00039.html
+++ b/doc/html/a00039.html
@@ -4,35 +4,42 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::vector_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator_category</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator *</b>() const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a9">operator++</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a11">operator++</a>(int)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a10">operator--</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a12">operator--</a>(int)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator<</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator[]</b>(ptrdiff_t k) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::concurrent_vector</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a0">vector_iterator</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>vector_iterator</b>(const vector_iterator< Container, typename Container::value_type > &other) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_vector_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>default_initial_segments</b> enum value (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>helper</b> (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x2">internal_array_op1</a> typedef</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x3">internal_array_op2</a> typedef</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_assign</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_capacity</b>() const (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_clear</b>(internal_array_op1 destroy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_compact</b>(size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow</b>(size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow_by</b>(size_type delta, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow_to_at_least</b>(size_type new_size, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_push_back</b>(size_type element_size, size_type &index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(size_type n, size_type element_size, size_type max_size) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_swap</b>(concurrent_vector_base_v3 &v) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_throw_exception</b>(size_type) const (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p2">my_early_size</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p1">my_first_block</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p3">my_segment</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p4">my_storage</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointers_per_long_table</b> enum value (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x7x5">pointers_per_short_table</a> enum value</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_base</b>(segment_index_t k) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_base_index_of</b>(segment_index_t &index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_index_of</b>(size_type index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_index_t</b> typedef (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_size</b>(segment_index_t k) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, protected, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p0">vector_allocator_ptr</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [protected]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00041.html b/doc/html/a00041.html
index 7c03f52..34eb53f 100644
--- a/doc/html/a00041.html
+++ b/doc/html/a00041.html
@@ -4,98 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a37">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a38">assign</a>(I first, I last)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a14">at</a>(size_type index)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a15">at</a>(size_type index) const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a34">back</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a35">back</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a24">begin</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a26">begin</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a20">capacity</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a40">clear</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a22">compact</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a0">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a1">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a2">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a3">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a4">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a5">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>default_initial_segments</b> enum value (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a19">empty</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a25">end</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a27">end</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a32">front</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a33">front</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a36">get_allocator</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a8">grow_by</a>(size_type delta)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a9">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a10">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x2">internal_array_op1</a> typedef</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x3">internal_array_op2</a> typedef</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_assign</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_capacity</b>() const (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_clear</b>(internal_array_op1 destroy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_compact</b>(size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op2 copy) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow</b>(size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow_by</b>(size_type delta, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_grow_to_at_least</b>(size_type new_size, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_push_back</b>(size_type element_size, size_type &index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(size_type n, size_type element_size, size_type max_size) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_swap</b>(concurrent_vector_base_v3 &v) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_throw_exception</b>(size_type) const (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal_vector_base</b>() const (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a23">max_size</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p2">my_early_size</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p1">my_first_block</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p3">my_segment</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p4">my_storage</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a6">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a7">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a12">operator[]</a>(size_type index)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a13">operator[]</a>(size_type index) const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointers_per_long_table</b> enum value (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#x7x5">pointers_per_short_table</a> enum value</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a11">push_back</a>(const_reference item)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a16">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a17">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a28">rbegin</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a30">rbegin</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a29">rend</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a31">rend</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a21">reserve</a>(size_type n)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_base</b>(segment_index_t k) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_base_index_of</b>(segment_index_t &index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_index_of</b>(size_type index) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_index_t</b> typedef (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>segment_size</b>(segment_index_t k) (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a18">size</a>() const </td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a39">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00183.html#p0">vector_allocator_ptr</a></td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00182.html#a41">~concurrent_vector</a>()</td><td><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_vector_base_v3::internal_segments_table Member List</h1>This is the complete list of members for <a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>first_block</b> (defined in <a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>)</td><td><a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>table</b> (defined in <a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>)</td><td><a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00039.html b/doc/html/a00042.html
similarity index 57%
copy from doc/html/a00039.html
copy to doc/html/a00042.html
index d7228b2..67a3600 100644
--- a/doc/html/a00039.html
+++ b/doc/html/a00042.html
@@ -4,35 +4,36 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::vector_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>iterator_category</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator *</b>() const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a9">operator++</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a11">operator++</a>(int)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator+=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a10">operator--</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a12">operator--</a>(int)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator<</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>operator[]</b>(ptrdiff_t k) const (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::concurrent_vector</b> (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00238.html#a0">vector_iterator</a>()</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>vector_iterator</b>(const vector_iterator< Container, typename Container::value_type > &other) (defined in <a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::vector_iterator< Container, Value > Member List</h1>This is the complete list of members for <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>iterator_category</b> typedef (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator *</b>() const (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator+</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator+</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00274.html#a10">operator++</a>()</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00274.html#a12">operator++</a>(int)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator+=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-</b>(ptrdiff_t offset) const (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00274.html#a11">operator--</a>()</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00274.html#a13">operator--</a>(int)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-=</b>(ptrdiff_t offset) (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator-></b>() const (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator<</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator==</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator[]</b>(ptrdiff_t k) const (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::concurrent_vector</b> (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>vector_iterator</b>(const Container &vector, size_t index) (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00274.html#a1">vector_iterator</a>()</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>vector_iterator</b>(const vector_iterator< Container, typename Container::value_type > &other) (defined in <a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>)</td><td><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00044.html b/doc/html/a00044.html
index 4272639..f4b1287 100644
--- a/doc/html/a00044.html
+++ b/doc/html/a00044.html
@@ -4,17 +4,100 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00198.html">tbb::mutex</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00198.html">tbb::mutex</a>)</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00198.html">tbb::mutex</a>)</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00198.html">tbb::mutex</a>)</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00198.html#a0">mutex</a>()</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00198.html">tbb::mutex</a>)</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00198.html">tbb::mutex</a>)</td><td><a class="el" href="a00198.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_vector< T, A > Member List</h1>This is the complete list of members for <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>allocator_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a37">assign</a>(size_type n, const_reference t)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a38">assign</a>(I first, I last)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a14">at</a>(size_type index)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a15">at</a>(size_type index) const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a34">back</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a35">back</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a24">begin</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a26">begin</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a20">capacity</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a40">clear</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a22">compact</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a0">concurrent_vector</a>(const allocator_type &a=allocator_type())</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a1">concurrent_vector</a>(const concurrent_vector &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a2">concurrent_vector</a>(const concurrent_vector< T, M > &vector, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a3">concurrent_vector</a>(size_type n)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline, explicit]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a4">concurrent_vector</a>(size_type n, const_reference t, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a5">concurrent_vector</a>(I first, I last, const allocator_type &a=allocator_type())</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_range_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>default_initial_segments</b> enum value (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a19">empty</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a25">end</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a27">end</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a32">front</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a33">front</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a36">get_allocator</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a8">grow_by</a>(size_type delta)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a9">grow_by</a>(size_type delta, const_reference t)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a10">grow_to_at_least</a>(size_type n)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::vector_iterator</b> (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x2">internal_array_op1</a> typedef</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x3">internal_array_op2</a> typedef</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_assign</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_capacity</b>() const (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_clear</b>(internal_array_op1 destroy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_compact</b>(size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_copy</b>(const concurrent_vector_base_v3 &src, size_type element_size, internal_array_op2 copy) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow</b>(size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow_by</b>(size_type delta, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_grow_to_at_least</b>(size_type new_size, size_type element_size, internal_array_op2 init, const void *src) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_push_back</b>(size_type element_size, size_type &index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_reserve</b>(size_type n, size_type element_size, size_type max_size) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_swap</b>(concurrent_vector_base_v3 &v) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_throw_exception</b>(size_type) const (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal_vector_base</b>() const (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a23">max_size</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p2">my_early_size</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p1">my_first_block</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p3">my_segment</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p4">my_storage</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a6">operator=</a>(const concurrent_vector &vector)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a7">operator=</a>(const concurrent_vector< T, M > &vector)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a12">operator[]</a>(size_type index)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a13">operator[]</a>(size_type index) const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointers_per_long_table</b> enum value (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#x7x5">pointers_per_short_table</a> enum value</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a11">push_back</a>(const_reference item)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a16">range</a>(size_t grainsize=1)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a17">range</a>(size_t grainsize=1) const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>range_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a28">rbegin</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a30">rbegin</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a29">rend</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a31">rend</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a21">reserve</a>(size_type n)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reverse_iterator</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_base</b>(segment_index_t k) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_base_index_of</b>(segment_index_t &index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_index_of</b>(size_type index) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_index_t</b> typedef (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>segment_size</b>(segment_index_t k) (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [inline, private, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a18">size</a>() const </td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a39">swap</a>(concurrent_vector &vector)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>)</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00210.html#p0">vector_allocator_ptr</a></td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00209.html#a41">~concurrent_vector</a>()</td><td><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~concurrent_vector_base_v3</b>() (defined in <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>)</td><td><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td><code> [private]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00095.html b/doc/html/a00047.html
similarity index 50%
rename from doc/html/a00095.html
rename to doc/html/a00047.html
index 5fed527..901ea40 100644
--- a/doc/html/a00095.html
+++ b/doc/html/a00047.html
@@ -4,16 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00217.html">tbb::spin_mutex</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00217.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00217.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00217.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00217.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00217.html#a0">spin_mutex</a>()</td><td><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::mutex Member List</h1>This is the complete list of members for <a class="el" href="a00227.html">tbb::mutex</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00227.html">tbb::mutex</a>)</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00227.html">tbb::mutex</a>)</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00227.html">tbb::mutex</a>)</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00227.html#a0">mutex</a>()</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00227.html">tbb::mutex</a>)</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~mutex</b>() (defined in <a class="el" href="a00227.html">tbb::mutex</a>)</td><td><a class="el" href="a00227.html">tbb::mutex</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00045.html b/doc/html/a00048.html
similarity index 54%
rename from doc/html/a00045.html
rename to doc/html/a00048.html
index 4f54e8b..169501b 100644
--- a/doc/html/a00045.html
+++ b/doc/html/a00048.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00199.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00199.html#a3">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00199.html#a5">release</a>()</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00199.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00199.html#a1">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00199.html#a4">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00199.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00228.html">tbb::mutex::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a3">acquire</a>(mutex &mutex)</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a5">release</a>()</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a1">scoped_lock</a>(mutex &mutex)</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a4">try_acquire</a>(mutex &mutex)</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00228.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00046.html b/doc/html/a00053.html
similarity index 77%
rename from doc/html/a00046.html
rename to doc/html/a00053.html
index 5a61b54..11ade10 100644
--- a/doc/html/a00046.html
+++ b/doc/html/a00053.html
@@ -4,12 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::strip< T > Member List</h1>This is the complete list of members for <a class="el" href="a00226.html">tbb::internal::strip< T ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>type</b> typedef (defined in <a class="el" href="a00226.html">tbb::internal::strip< T ></a>)</td><td><a class="el" href="a00226.html">tbb::internal::strip< T ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::strip< T > Member List</h1>This is the complete list of members for <a class="el" href="a00259.html">tbb::internal::strip< T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>type</b> typedef (defined in <a class="el" href="a00259.html">tbb::internal::strip< T ></a>)</td><td><a class="el" href="a00259.html">tbb::internal::strip< T ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00054.html b/doc/html/a00054.html
deleted file mode 100644
index 2562cfd..0000000
--- a/doc/html/a00054.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00201.html#a0">add</a>(const Item &item)</td><td><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00055.html b/doc/html/a00055.html
deleted file mode 100644
index ed14e9f..0000000
--- a/doc/html/a00055.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::parallel_do_operator_selector< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>call</b>(const Body &obj, A1 &arg1, A2 &arg2) (defined in <a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>)</td><td><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td><td><code> [inline, static]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00056.html b/doc/html/a00056.html
deleted file mode 100644
index 57e118e..0000000
--- a/doc/html/a00056.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_iteration_task< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>parallel_do_feeder_impl</b> (defined in <a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a>)</td><td><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00058.html b/doc/html/a00058.html
deleted file mode 100644
index 394d3d1..0000000
--- a/doc/html/a00058.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::parallel_do_feeder_impl< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00201.html#a0">add</a>(const Item &item)</td><td><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>my_barrier</b> (defined in <a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>my_body</b> (defined in <a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00059.html b/doc/html/a00059.html
deleted file mode 100644
index c52a598..0000000
--- a/doc/html/a00059.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_group_task_forward< Iterator, Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>do_task_iter</b> (defined in <a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>)</td><td><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00061.html b/doc/html/a00061.html
index 8fbe34c..658e268 100644
--- a/doc/html/a00061.html
+++ b/doc/html/a00061.html
@@ -4,57 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_task_iter< Iterator, Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>do_task_iter</b>(Iterator first, Iterator last, feeder_type &feeder) (defined in <a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>)</td><td><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::parallel_do_feeder< Item > Member List</h1>This is the complete list of members for <a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00231.html#a0">add</a>(const Item &item)</td><td><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00062.html b/doc/html/a00062.html
index 5d7125b..f970bb3 100644
--- a/doc/html/a00062.html
+++ b/doc/html/a00062.html
@@ -4,56 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_for< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, const Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::parallel_do_operator_selector< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>call</b>(const Body &obj, A1 &arg1, A2 &arg2) (defined in <a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>)</td><td><a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td><td><code> [inline, static]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00063.html b/doc/html/a00063.html
index d2a5f40..a3d38cc 100644
--- a/doc/html/a00063.html
+++ b/doc/html/a00063.html
@@ -4,57 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_reduce< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>start_reduce</b> (defined in <a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a>)</td><td><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_iteration_task< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>parallel_do_feeder_impl</b> (defined in <a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00064.html b/doc/html/a00064.html
deleted file mode 100644
index 0a6f02b..0000000
--- a/doc/html/a00064.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_reduce< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>finish_reduce</b> (defined in <a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00065.html b/doc/html/a00065.html
index 54d6f0a..4020b5c 100644
--- a/doc/html/a00065.html
+++ b/doc/html/a00065.html
@@ -4,57 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_reduce_with_affinity< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>start_reduce_with_affinity</b> (defined in <a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a>)</td><td><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::parallel_do_feeder_impl< Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00231.html#a0">add</a>(const Item &item)</td><td><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::parallel_do_feeder_impl</b> (defined in <a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a>)</td><td><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>my_barrier</b> (defined in <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>my_body</b> (defined in <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>parallel_do_feeder_impl</b>() (defined in <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>parallel_do_feeder_impl</b>(tbb::task_group_context &context) (defined in <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~parallel_do_feeder_impl</b>() (defined in <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>)</td><td><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00066.html b/doc/html/a00066.html
index 40a7c5d..2cf1431 100644
--- a/doc/html/a00066.html
+++ b/doc/html/a00066.html
@@ -4,57 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_reduce_with_affinity< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>finish_reduce_with_affinity</b> (defined in <a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, affinity_partitioner &partitioner) (defined in <a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>)</td><td><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_group_task_forward< Iterator, Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>do_task_iter</b> (defined in <a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>)</td><td><a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00068.html b/doc/html/a00068.html
index 3e74c1f..6decb2c 100644
--- a/doc/html/a00068.html
+++ b/doc/html/a00068.html
@@ -4,12 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00190.html">tbb::final_scan_tag</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00190.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00190.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_task_iter< Iterator, Body, Item > Member List</h1>This is the complete list of members for <a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>do_task_iter</b>(Iterator first, Iterator last, feeder_type &feeder) (defined in <a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>)</td><td><a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00069.html b/doc/html/a00069.html
index 55e97b6..0325627 100644
--- a/doc/html/a00069.html
+++ b/doc/html/a00069.html
@@ -4,60 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::final_sum< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>body</b> (defined in <a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>final_sum</b>(Body &body_) (defined in <a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>finish_construction</b>(const Range &range_, Body *stuff_last_) (defined in <a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~final_sum</b>() (defined in <a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::start_for< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, const Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, const Body &body, const Partitioner &partitioner, task_group_context &context) (defined in <a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00070.html b/doc/html/a00070.html
index e13882b..c28311f 100644
--- a/doc/html/a00070.html
+++ b/doc/html/a00070.html
@@ -4,61 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::sum_node< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>body</b> (defined in <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>finish_scan</b> (defined in <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>incoming</b> (defined in <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>start_scan</b> (defined in <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>stuff_last</b> (defined in <a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_reduce< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>start_reduce</b> (defined in <a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a>)</td><td><a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00071.html b/doc/html/a00071.html
index 8a6521c..99c4d23 100644
--- a/doc/html/a00071.html
+++ b/doc/html/a00071.html
@@ -4,60 +4,63 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_scan< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00194.html#a0">execute</a>()</td><td><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td><td><code> [inline, virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>finish_scan</b>(sum_node_type *&return_slot_, final_sum_type **sum_, sum_node_type &result_) (defined in <a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>result</b> (defined in <a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>right_zombie</b> (defined in <a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::start_reduce< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>finish_reduce</b> (defined in <a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner, task_group_context &context) (defined in <a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00072.html b/doc/html/a00072.html
index d6dc831..92792e0 100644
--- a/doc/html/a00072.html
+++ b/doc/html/a00072.html
@@ -4,59 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_scan< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>start_scan</b>(sum_node_type *&return_slot_, start_scan &parent, sum_node_type *parent_sum_) (defined in <a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>start_scan</b>(sum_node_type *&return_slot_, const Range &range_, final_sum_type &body_, const Partitioner &partitioner_) (defined in <a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_reduce_with_affinity< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>start_reduce_with_affinity</b> (defined in <a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a>)</td><td><a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00073.html b/doc/html/a00073.html
index 5ec29d7..8499e9e 100644
--- a/doc/html/a00073.html
+++ b/doc/html/a00073.html
@@ -4,19 +4,62 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>begin</b> (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>comp</b> (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>empty</b>() const (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>grainsize</b> (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_divisible</b>() const (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>quick_sort_range</b>(RandomAccessIterator begin_, size_t size_, const Compare &comp_) (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>quick_sort_range</b>(quick_sort_range &range, split) (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size</b> (defined in <a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::start_reduce_with_affinity< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>finish_reduce_with_affinity</b> (defined in <a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>)</td><td><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, affinity_partitioner &partitioner) (defined in <a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>)</td><td><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context) (defined in <a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>)</td><td><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00074.html b/doc/html/a00074.html
index e3bf3af..06e9d59 100644
--- a/doc/html/a00074.html
+++ b/doc/html/a00074.html
@@ -4,12 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>operator()</b>(const quick_sort_range< RandomAccessIterator, Compare > &range) const (defined in <a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction > Member List</h1>This is the complete list of members for <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>join</b>(lambda_reduce_body &rhs) (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>lambda_reduce_body</b>(const Value &identity, const RealBody &body, const Reduction &reduction) (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>lambda_reduce_body</b>(const lambda_reduce_body &other) (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>lambda_reduce_body</b>(lambda_reduce_body &other, tbb::split) (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator()</b>(Range &range) (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>result</b>() const (defined in <a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>)</td><td><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00075.html b/doc/html/a00075.html
index 3f3c0ef..226bb27 100644
--- a/doc/html/a00075.html
+++ b/doc/html/a00075.html
@@ -4,58 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_iteration_task< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::parallel_while<Body></b> (defined in <a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a>)</td><td><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>while_group_task</b> (defined in <a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a>)</td><td><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00237.html">tbb::pre_scan_tag</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00237.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00237.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00076.html b/doc/html/a00076.html
index 676c4b6..37c6bab 100644
--- a/doc/html/a00076.html
+++ b/doc/html/a00076.html
@@ -4,57 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_group_task< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>while_task</b> (defined in <a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a>)</td><td><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::final_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00217.html">tbb::final_scan_tag</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00217.html">tbb::final_scan_tag</a>)</td><td><a class="el" href="a00217.html">tbb::final_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00077.html b/doc/html/a00077.html
index e485c4e..a6b40a8 100644
--- a/doc/html/a00077.html
+++ b/doc/html/a00077.html
@@ -4,57 +4,64 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_task< Stream, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::parallel_while<Body></b> (defined in <a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a>)</td><td><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::final_sum< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>body</b> (defined in <a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>final_sum</b>(Body &body_) (defined in <a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>finish_construction</b>(const Range &range_, Body *stuff_last_) (defined in <a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~final_sum</b>() (defined in <a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>)</td><td><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00078.html b/doc/html/a00078.html
index a3f8cf9..9cafb05 100644
--- a/doc/html/a00078.html
+++ b/doc/html/a00078.html
@@ -4,17 +4,65 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00204.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00204.html#a3">add</a>(const value_type &item)</td><td><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00204.html#a0">parallel_while</a>()</td><td><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00204.html#a2">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00204.html#w0">value_type</a> typedef</td><td><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00204.html#a1">~parallel_while</a>()</td><td><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::sum_node< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>body</b> (defined in <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>finish_scan</b> (defined in <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>incoming</b> (defined in <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>start_scan</b> (defined in <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>stuff_last</b> (defined in <a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>)</td><td><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00079.html b/doc/html/a00079.html
index 4ef8640..a0b8c0e 100644
--- a/doc/html/a00079.html
+++ b/doc/html/a00079.html
@@ -4,14 +4,64 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::affinity_partitioner_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>affinity_partition_type</b> (defined in <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_scan< Range, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00221.html#a0">execute</a>()</td><td><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>finish_scan</b>(sum_node_type *&return_slot_, final_sum_type **sum_, sum_node_type &result_) (defined in <a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>result</b> (defined in <a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>right_zombie</b> (defined in <a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a>)</td><td><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00080.html b/doc/html/a00080.html
index 729ecb5..7ea816b 100644
--- a/doc/html/a00080.html
+++ b/doc/html/a00080.html
@@ -4,16 +4,63 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::partition_type_base Member List</h1>This is the complete list of members for <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>continue_after_execute_range</b>(task &t) (defined in <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>decide_whether_to_delay</b>() (defined in <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>note_affinity</b>(task::affinity_id id) (defined in <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>set_affinity</b>(task &t) (defined in <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>spawn_or_delay</b>(bool, task &a, task &b) (defined in <a class="el" href="a00205.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::start_scan< Range, Body, Partitioner > Member List</h1>This is the complete list of members for <a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>run</b>(const Range &range, Body &body, const Partitioner &partitioner) (defined in <a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>start_scan</b>(sum_node_type *&return_slot_, start_scan &parent, sum_node_type *parent_sum_) (defined in <a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>start_scan</b>(sum_node_type *&return_slot_, const Range &range_, final_sum_type &body_, const Partitioner &partitioner_) (defined in <a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>)</td><td><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00081.html b/doc/html/a00081.html
index a8a2a64..4721365 100644
--- a/doc/html/a00081.html
+++ b/doc/html/a00081.html
@@ -4,15 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00216.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00216.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00216.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00216.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00216.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00216.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00216.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>simple_partitioner</b>() (defined in <a class="el" href="a00216.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00216.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>begin</b> (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>comp</b> (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>empty</b>() const (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>grainsize</b> (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_divisible</b>() const (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00229.html#a0">no_assign</a>()</td><td><a class="el" href="a00229.html">tbb::internal::no_assign</a></td><td><code> [inline, private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>quick_sort_range</b>(RandomAccessIterator begin_, size_t size_, const Compare &comp_) (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>quick_sort_range</b>(quick_sort_range &range, split) (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size</b> (defined in <a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00082.html b/doc/html/a00082.html
new file mode 100644
index 0000000..df2d298
--- /dev/null
+++ b/doc/html/a00082.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00229.html#a0">no_assign</a>()</td><td><a class="el" href="a00229.html">tbb::internal::no_assign</a></td><td><code> [inline, private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator()</b>(const blocked_range< RandomAccessIterator > &range) const (defined in <a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>quick_sort_pretest_body</b>(const Compare &_comp) (defined in <a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00083.html b/doc/html/a00083.html
index 28d2010..6034022 100644
--- a/doc/html/a00083.html
+++ b/doc/html/a00083.html
@@ -4,15 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00167.html">tbb::auto_partitioner</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>auto_partitioner</b>() (defined in <a class="el" href="a00167.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00167.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00167.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00167.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00167.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00167.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00167.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00167.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Member List</h1>This is the complete list of members for <a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>operator()</b>(const quick_sort_range< RandomAccessIterator, Compare > &range) const (defined in <a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>)</td><td><a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00084.html b/doc/html/a00084.html
new file mode 100644
index 0000000..b7aab8c
--- /dev/null
+++ b/doc/html/a00084.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::while_iteration_task< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::parallel_while<Body></b> (defined in <a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a>)</td><td><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>while_group_task</b> (defined in <a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a>)</td><td><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00085.html b/doc/html/a00085.html
index 45ab397..d64b060 100644
--- a/doc/html/a00085.html
+++ b/doc/html/a00085.html
@@ -4,17 +4,61 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00162.html">tbb::affinity_partitioner</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>affinity_partitioner</b>() (defined in <a class="el" href="a00162.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::affinity_partition_type</b> (defined in <a class="el" href="a00162.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00162.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce_with_affinity</b> (defined in <a class="el" href="a00162.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00162.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::while_group_task< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>while_task</b> (defined in <a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a>)</td><td><a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00086.html b/doc/html/a00086.html
new file mode 100644
index 0000000..8dfa013
--- /dev/null
+++ b/doc/html/a00086.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::while_task< Stream, Body > Member List</h1>This is the complete list of members for <a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::parallel_while<Body></b> (defined in <a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a>)</td><td><a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00087.html b/doc/html/a00087.html
index fc9cb2f..83d1a7e 100644
--- a/doc/html/a00087.html
+++ b/doc/html/a00087.html
@@ -4,21 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00189.html">tbb::filter</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00189.html#a0">is_serial</a>() const </td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00189.html#x2">mode</a> enum name</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00189.html#a1">operator()</a>(void *item)=0</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>parallel</b> enum value (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>serial</b> enum value (defined in <a class="el" href="a00189.html">tbb::filter</a>)</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00189.html#a2">~filter</a>()</td><td><a class="el" href="a00189.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::parallel_while< Body > Member List</h1>This is the complete list of members for <a class="el" href="a00234.html">tbb::parallel_while< Body ></a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00234.html#a3">add</a>(const value_type &item)</td><td><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00234.html#a0">parallel_while</a>()</td><td><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00234.html#a2">run</a>(Stream &stream, const Body &body)</td><td><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00234.html#w0">value_type</a> typedef</td><td><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00234.html#a1">~parallel_while</a>()</td><td><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00088.html b/doc/html/a00088.html
index dfb7c10..a7fb178 100644
--- a/doc/html/a00088.html
+++ b/doc/html/a00088.html
@@ -4,18 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00206.html">tbb::pipeline</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00206.html#a2">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00206.html#a4">clear</a>()</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00206.html">tbb::pipeline</a>)</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00206.html">tbb::pipeline</a>)</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00206.html#a0">pipeline</a>()</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00206.html#a3">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00206.html#a1">~pipeline</a>()</td><td><a class="el" href="a00206.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::affinity_partitioner_base_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>affinity_partition_type</b> (defined in <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00089.html b/doc/html/a00089.html
index 28c4507..095c17f 100644
--- a/doc/html/a00089.html
+++ b/doc/html/a00089.html
@@ -4,16 +4,16 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00208.html">tbb::queuing_mutex</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00208.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00208.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00208.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00208.html#a0">queuing_mutex</a>()</td><td><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00208.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::partition_type_base Member List</h1>This is the complete list of members for <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>continue_after_execute_range</b>(task &) (defined in <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>decide_whether_to_delay</b>() (defined in <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>note_affinity</b>(task::affinity_id) (defined in <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>set_affinity</b>(task &) (defined in <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>spawn_or_delay</b>(bool, task &a, task &b) (defined in <a class="el" href="a00235.html">tbb::internal::partition_type_base</a>)</td><td><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00090.html b/doc/html/a00090.html
index 4a82510..6cafe89 100644
--- a/doc/html/a00090.html
+++ b/doc/html/a00090.html
@@ -4,18 +4,15 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00209.html#a3">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a5">release</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a1">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a4">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::simple_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00249.html">tbb::simple_partitioner</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00249.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00249.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00249.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::simple_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>simple_partitioner</b>() (defined in <a class="el" href="a00249.html">tbb::simple_partitioner</a>)</td><td><a class="el" href="a00249.html">tbb::simple_partitioner</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00092.html b/doc/html/a00092.html
index 0f22532..296b381 100644
--- a/doc/html/a00092.html
+++ b/doc/html/a00092.html
@@ -4,20 +4,15 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00211.html#a3">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a7">downgrade_to_reader</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a5">release</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a1">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a4">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a6">upgrade_to_writer</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::auto_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00193.html">tbb::auto_partitioner</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>auto_partitioner</b>() (defined in <a class="el" href="a00193.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::auto_partitioner</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00193.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce</b> (defined in <a class="el" href="a00193.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00193.html">tbb::auto_partitioner</a>)</td><td><a class="el" href="a00193.html">tbb::auto_partitioner</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00094.html b/doc/html/a00094.html
index 66167e7..15dcb5d 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00094.html
@@ -4,18 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00215.html#a3">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a5">release</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a1">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a4">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::affinity_partitioner Member List</h1>This is the complete list of members for <a class="el" href="a00188.html">tbb::affinity_partitioner</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>affinity_partitioner</b>() (defined in <a class="el" href="a00188.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::affinity_partition_type</b> (defined in <a class="el" href="a00188.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_for</b> (defined in <a class="el" href="a00188.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_reduce_with_affinity</b> (defined in <a class="el" href="a00188.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::start_scan</b> (defined in <a class="el" href="a00188.html">tbb::affinity_partitioner</a>)</td><td><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::affinity_partitioner</b> (defined in <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>)</td><td><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00096.html b/doc/html/a00096.html
index f81c189..f30503e 100644
--- a/doc/html/a00096.html
+++ b/doc/html/a00096.html
@@ -4,18 +4,26 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00218.html#a2">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a4">release</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a1">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a3">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a5">~scoped_lock</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::filter Member List</h1>This is the complete list of members for <a class="el" href="a00216.html">tbb::filter</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>filter</b>(bool is_serial_) (defined in <a class="el" href="a00216.html">tbb::filter</a>)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>filter</b>(mode filter_mode) (defined in <a class="el" href="a00216.html">tbb::filter</a>)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#a4">finalize</a>(void *)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00216.html">tbb::filter</a>)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_ordered</b>() const (defined in <a class="el" href="a00216.html">tbb::filter</a>)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#a0">is_serial</a>() const </td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#w4">mode</a> enum name</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#a2">operator()</a>(void *item)=0</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#w4w0">parallel</a> enum value</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pipeline</b> (defined in <a class="el" href="a00216.html">tbb::filter</a>)</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#w4w3">serial</a> enum value</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#w4w1">serial_in_order</a> enum value</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#w4w2">serial_out_of_order</a> enum value</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00216.html#a3">~filter</a>()</td><td><a class="el" href="a00216.html">tbb::filter</a></td><td><code> [virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00097.html b/doc/html/a00097.html
index b916ffd..ae9d319 100644
--- a/doc/html/a00097.html
+++ b/doc/html/a00097.html
@@ -4,15 +4,19 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00219.html#a0">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::pipeline Member List</h1>This is the complete list of members for <a class="el" href="a00236.html">tbb::pipeline</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a2">add_filter</a>(filter &filter_)</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a5">clear</a>()</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>filter</b> (defined in <a class="el" href="a00236.html">tbb::pipeline</a>)</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::stage_task</b> (defined in <a class="el" href="a00236.html">tbb::pipeline</a>)</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a0">pipeline</a>()</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a3">run</a>(size_t max_number_of_live_tokens)</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a4">run</a>(size_t max_number_of_live_tokens, tbb::task_group_context &context)</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00236.html#a1">~pipeline</a>()</td><td><a class="el" href="a00236.html">tbb::pipeline</a></td><td><code> [virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00098.html b/doc/html/a00098.html
index 9fff28b..e438840 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00098.html
@@ -4,20 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00220.html#a3">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a6">downgrade_to_reader</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a5">release</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a1">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a7">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a4">upgrade_to_writer</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00238.html">tbb::queuing_mutex</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00238.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00238.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00238.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00238.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00238.html#a0">queuing_mutex</a>()</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00238.html">tbb::queuing_mutex</a>)</td><td><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00090.html b/doc/html/a00099.html
similarity index 59%
copy from doc/html/a00090.html
copy to doc/html/a00099.html
index 4a82510..377f475 100644
--- a/doc/html/a00090.html
+++ b/doc/html/a00099.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00209.html#a3">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a5">release</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a1">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a4">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00209.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a3">acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a5">release</a>()</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a1">scoped_lock</a>(queuing_mutex &m)</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a4">try_acquire</a>(queuing_mutex &m)</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00239.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00091.html b/doc/html/a00100.html
similarity index 58%
rename from doc/html/a00091.html
rename to doc/html/a00100.html
index e7a78d9..bd43d90 100644
--- a/doc/html/a00091.html
+++ b/doc/html/a00100.html
@@ -4,17 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00210.html#a0">queuing_rw_mutex</a>()</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00210.html#a1">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_rw_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00240.html#a0">queuing_rw_mutex</a>()</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>)</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00240.html#a1">~queuing_rw_mutex</a>()</td><td><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00092.html b/doc/html/a00101.html
similarity index 57%
copy from doc/html/a00092.html
copy to doc/html/a00101.html
index 0f22532..baa3d16 100644
--- a/doc/html/a00092.html
+++ b/doc/html/a00101.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00211.html#a3">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a7">downgrade_to_reader</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a5">release</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a1">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a4">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a6">upgrade_to_writer</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00211.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_rw_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a3">acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a7">downgrade_to_reader</a>()</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a5">release</a>()</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a1">scoped_lock</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a4">try_acquire</a>(queuing_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a6">upgrade_to_writer</a>()</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00241.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00093.html b/doc/html/a00102.html
similarity index 63%
rename from doc/html/a00093.html
rename to doc/html/a00102.html
index 0f8dc52..df0d9c7 100644
--- a/doc/html/a00093.html
+++ b/doc/html/a00102.html
@@ -4,17 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00214.html">tbb::recursive_mutex</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00214.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00214.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00214.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00214.html#a0">recursive_mutex</a>()</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00214.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~recursive_mutex</b>() (defined in <a class="el" href="a00214.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::recursive_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00245.html">tbb::recursive_mutex</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00245.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00245.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00245.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00245.html#a0">recursive_mutex</a>()</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00245.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~recursive_mutex</b>() (defined in <a class="el" href="a00245.html">tbb::recursive_mutex</a>)</td><td><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00094.html b/doc/html/a00103.html
similarity index 60%
copy from doc/html/a00094.html
copy to doc/html/a00103.html
index 66167e7..e687d54 100644
--- a/doc/html/a00094.html
+++ b/doc/html/a00103.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00215.html#a3">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a5">release</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a1">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a4">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00215.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::recursive_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a3">acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a5">release</a>()</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a1">scoped_lock</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a4">try_acquire</a>(recursive_mutex &mutex)</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00246.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00104.html b/doc/html/a00104.html
index 9df4637..47cd644 100644
--- a/doc/html/a00104.html
+++ b/doc/html/a00104.html
@@ -4,18 +4,28 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::task_prefix Member List</h1>This is the complete list of members for <a class="el" href="a00230.html">tbb::internal::task_prefix</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::task</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::task_list</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::scalable_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00247.html#a5">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>construct</b>(pointer p, const T &val) (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00247.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>destroy</b>(pointer p) (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00247.html#a7">max_size</a>() const </td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>() (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>(const scalable_allocator &) (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scalable_allocator</b>(const scalable_allocator< U > &) (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>)</td><td><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00105.html b/doc/html/a00105.html
deleted file mode 100644
index e7354be..0000000
--- a/doc/html/a00105.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task Member List</h1>This is the complete list of members for <a class="el" href="a00228.html">tbb::task</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a1">execute</a>()=0</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>task_list</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00106.html b/doc/html/a00106.html
index ddb4cbc..0ba88a5 100644
--- a/doc/html/a00106.html
+++ b/doc/html/a00106.html
@@ -4,56 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00188.html">tbb::empty_task</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00228.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a25">affinity</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a3">allocate_child</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e0">allocate_root</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a10">depth</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00228.html">tbb::task</a>)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a19">parent</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a22">ref_count</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e3">self</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e1">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#e2">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a21">state</a>() const </td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#w8">state_type</a> enum name</td><td><a class="el" href="a00228.html">tbb::task</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#b0">task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00228.html#a0">~task</a>()</td><td><a class="el" href="a00228.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::scalable_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00248.html">tbb::scalable_allocator< void ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00248.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00248.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00248.html">tbb::scalable_allocator< void ></a>)</td><td><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00108.html b/doc/html/a00108.html
index 3e12cd2..f896cc1 100644
--- a/doc/html/a00108.html
+++ b/doc/html/a00108.html
@@ -4,20 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00231.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00231.html#s0">automatic</a></td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#e0">default_num_threads</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#s1">deferred</a></td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a0">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a1">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a3">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a2">terminate</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a4">~task_scheduler_init</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::spin_mutex Member List</h1>This is the complete list of members for <a class="el" href="a00250.html">tbb::spin_mutex</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>internal_construct</b>() (defined in <a class="el" href="a00250.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00250.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00250.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00250.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scoped_lock</b> (defined in <a class="el" href="a00250.html">tbb::spin_mutex</a>)</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00250.html#a0">spin_mutex</a>()</td><td><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00096.html b/doc/html/a00109.html
similarity index 60%
copy from doc/html/a00096.html
copy to doc/html/a00109.html
index f81c189..d9c6ee4 100644
--- a/doc/html/a00096.html
+++ b/doc/html/a00109.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00218.html#a2">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a4">release</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a1">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a3">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00218.html#a5">~scoped_lock</a>()</td><td><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::spin_mutex::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a2">acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a4">release</a>()</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a1">scoped_lock</a>(spin_mutex &m)</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a3">try_acquire</a>(spin_mutex &m)</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00251.html#a5">~scoped_lock</a>()</td><td><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00110.html b/doc/html/a00110.html
index 99907fe..e7eb5dc 100644
--- a/doc/html/a00110.html
+++ b/doc/html/a00110.html
@@ -4,32 +4,16 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a5">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#e0">allocator_type</a>()</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a8">construct</a>(pointer p, const T &value)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a9">destroy</a>(pointer p)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#w9">malloc_type</a> enum name</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a7">max_size</a>() const </td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scalable</b> enum value (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>standard</b> enum value (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator &) (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator< U > &) (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::spin_rw_mutex_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>is_fair_mutex</b> (defined in <a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_recursive_mutex</b> (defined in <a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>is_rw_mutex</b> (defined in <a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a>)</td><td><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00252.html#a0">spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00252.html#a1">~spin_rw_mutex_v3</a>()</td><td><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00098.html b/doc/html/a00111.html
similarity index 58%
copy from doc/html/a00098.html
copy to doc/html/a00111.html
index 9fff28b..d18359d 100644
--- a/doc/html/a00098.html
+++ b/doc/html/a00111.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00220.html#a3">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a6">downgrade_to_reader</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a5">release</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a1">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a7">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a4">upgrade_to_writer</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00220.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::spin_rw_mutex_v3::scoped_lock Member List</h1>This is the complete list of members for <a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a3">acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a6">downgrade_to_reader</a>()</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a5">release</a>()</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a0">scoped_lock</a>()</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a1">scoped_lock</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a7">try_acquire</a>(spin_rw_mutex &m, bool write=true)</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a4">upgrade_to_writer</a>()</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00253.html#a2">~scoped_lock</a>()</td><td><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00114.html b/doc/html/a00114.html
deleted file mode 100644
index fdc41ee..0000000
--- a/doc/html/a00114.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00168.html">tbb::bad_last_alloc</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>what</b>() const (defined in <a class="el" href="a00168.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00168.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00168.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00168.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00104.html b/doc/html/a00119.html
similarity index 64%
copy from doc/html/a00104.html
copy to doc/html/a00119.html
index 9df4637..a9076a1 100644
--- a/doc/html/a00104.html
+++ b/doc/html/a00119.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::task_prefix Member List</h1>This is the complete list of members for <a class="el" href="a00230.html">tbb::internal::task_prefix</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::task</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::task_list</b> (defined in <a class="el" href="a00230.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::task_prefix Member List</h1>This is the complete list of members for <a class="el" href="a00264.html">tbb::internal::task_prefix</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::task</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::task_list</b> (defined in <a class="el" href="a00264.html">tbb::internal::task_prefix</a>)</td><td><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00120.html b/doc/html/a00120.html
new file mode 100644
index 0000000..c85abd5
--- /dev/null
+++ b/doc/html/a00120.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::task_group_context Member List</h1>This is the complete list of members for <a class="el" href="a00262.html">tbb::task_group_context</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>bound</b> enum value (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00262.html#a3">cancel_group_execution</a>()</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00262.html#b0">init</a>()</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td><code> [protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00262.html#a4">is_group_execution_cancelled</a>() const </td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>isolated</b> enum value (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>kind_type</b> enum name (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00262.html#a2">reset</a>()</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00262.html#a0">task_group_context</a>(kind_type relation_with_parent=bound)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~task_group_context</b>() (defined in <a class="el" href="a00262.html">tbb::task_group_context</a>)</td><td><a class="el" href="a00262.html">tbb::task_group_context</a></td><td></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00122.html b/doc/html/a00122.html
index b1b079c..b3ff509 100644
--- a/doc/html/a00122.html
+++ b/doc/html/a00122.html
@@ -4,12 +4,63 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::no_copy Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::internal::no_copy</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::task Member List</h1>This is the complete list of members for <a class="el" href="a00261.html">tbb::task</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a1">execute</a>()=0</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>task_list</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00123.html b/doc/html/a00123.html
new file mode 100644
index 0000000..48a53eb
--- /dev/null
+++ b/doc/html/a00123.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::empty_task Member List</h1>This is the complete list of members for <a class="el" href="a00215.html">tbb::empty_task</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a12">add_to_depth</a>(int delta)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a25">affinity</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w1">affinity_id</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a4">allocate_additional_child_of</a>(task &t)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a3">allocate_child</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a2">allocate_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e0">allocate_root</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e1">allocate_root</a>(task_group_context &ctx)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w5">allocated</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a27">cancel_group_execution</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a10">depth</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w0">depth_type</a> typedef</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a5">destroy</a>(task &victim)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w2">executing</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w6">freed</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_additional_child_of_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_child_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_continuation_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::allocate_root_with_context_proxy</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>internal::scheduler</b> (defined in <a class="el" href="a00261.html">tbb::task</a>)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a28">is_cancelled</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a20">is_stolen_task</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a26">note_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a19">parent</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w4">ready</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w7">recycle</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a8">recycle_as_child_of</a>(task &new_parent)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a6">recycle_as_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a9">recycle_to_reexecute</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8w3">reexecute</a> enum value</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a22">ref_count</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e4">self</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a24">set_affinity</a>(affinity_id id)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a11">set_depth</a>(depth_type new_depth)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a13">set_ref_count</a>(int count)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a14">spawn</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a15">spawn</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a>(task &child)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a>(task_list &list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e2">spawn_root_and_wait</a>(task &root)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#e3">spawn_root_and_wait</a>(task_list &root_list)</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a21">state</a>() const </td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#w8">state_type</a> enum name</td><td><a class="el" href="a00261.html">tbb::task</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#b0">task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a18">wait_for_all</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00261.html#a0">~task</a>()</td><td><a class="el" href="a00261.html">tbb::task</a></td><td><code> [inline, virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00107.html b/doc/html/a00124.html
similarity index 56%
rename from doc/html/a00107.html
rename to doc/html/a00124.html
index bbf944e..dddf1a9 100644
--- a/doc/html/a00107.html
+++ b/doc/html/a00124.html
@@ -4,19 +4,19 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00229.html">tbb::task_list</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00229.html#a5">clear</a>()</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00229.html#a2">empty</a>() const </td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00229.html#a4">pop_front</a>()</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00229.html#a3">push_back</a>(task &task)</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00229.html">tbb::task_list</a>)</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00229.html#a0">task_list</a>()</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00229.html#a1">~task_list</a>()</td><td><a class="el" href="a00229.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::task_list Member List</h1>This is the complete list of members for <a class="el" href="a00263.html">tbb::task_list</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a5">clear</a>()</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a2">empty</a>() const </td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a4">pop_front</a>()</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a3">push_back</a>(task &task)</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>task</b> (defined in <a class="el" href="a00263.html">tbb::task_list</a>)</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a0">task_list</a>()</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00263.html#a1">~task_list</a>()</td><td><a class="el" href="a00263.html">tbb::task_list</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00108.html b/doc/html/a00125.html
similarity index 53%
copy from doc/html/a00108.html
copy to doc/html/a00125.html
index 3e12cd2..7e3cf30 100644
--- a/doc/html/a00108.html
+++ b/doc/html/a00125.html
@@ -4,20 +4,21 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00231.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00231.html#s0">automatic</a></td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#e0">default_num_threads</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#s1">deferred</a></td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a0">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a1">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a3">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a2">terminate</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00231.html#a4">~task_scheduler_init</a>()</td><td><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::task_scheduler_init Member List</h1>This is the complete list of members for <a class="el" href="a00265.html">tbb::task_scheduler_init</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00265.html#s0">automatic</a></td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#e0">default_num_threads</a>()</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#s1">deferred</a></td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a0">initialize</a>(int number_of_threads=automatic)</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a1">initialize</a>(int number_of_threads, stack_size_type thread_stack_size)</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a5">is_active</a>() const </td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a3">task_scheduler_init</a>(int number_of_threads=automatic, stack_size_type thread_stack_size=0)</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a2">terminate</a>()</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00265.html#a4">~task_scheduler_init</a>()</td><td><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00110.html b/doc/html/a00127.html
similarity index 53%
copy from doc/html/a00110.html
copy to doc/html/a00127.html
index 99907fe..d379a13 100644
--- a/doc/html/a00110.html
+++ b/doc/html/a00127.html
@@ -4,32 +4,32 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a5">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#e0">allocator_type</a>()</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a8">construct</a>(pointer p, const T &value)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a9">destroy</a>(pointer p)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#w9">malloc_type</a> enum name</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00232.html#a7">max_size</a>() const </td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>scalable</b> enum value (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>standard</b> enum value (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator &) (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator< U > &) (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_allocator< T > Member List</h1>This is the complete list of members for <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(reference x) const (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>address</b>(const_reference x) const (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#a5">allocate</a>(size_type n, const void *=0)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#e0">allocator_type</a>()</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>const_reference</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#a8">construct</a>(pointer p, const T &value)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#a6">deallocate</a>(pointer p, size_type)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#a9">destroy</a>(pointer p)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>difference_type</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#w9">malloc_type</a> enum name</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00266.html#a7">max_size</a>() const </td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reference</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>scalable</b> enum value (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>size_type</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>standard</b> enum value (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>() (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator &) (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb_allocator</b>(const tbb_allocator< U > &) (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>)</td><td><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00128.html b/doc/html/a00128.html
deleted file mode 100644
index 05cb5d9..0000000
--- a/doc/html/a00128.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::tbb_thread_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00234.html#a6">detach</a>()</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>get_id</b>() const (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#e0">hardware_concurrency</a>()</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#a5">join</a>()</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>joinable</b>() const (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>move_v3</b> (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [friend]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::swap</b> (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#a0">tbb_thread_v3</a>()</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#a1">tbb_thread_v3</a>(F f)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline, explicit]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#a2">tbb_thread_v3</a>(F f, X x)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00234.html#a3">tbb_thread_v3</a>(F f, X x, Y y)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>~tbb_thread_v3</b>() (defined in <a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00112.html b/doc/html/a00129.html
similarity index 70%
rename from doc/html/a00112.html
rename to doc/html/a00129.html
index c28170c..871ca47 100644
--- a/doc/html/a00112.html
+++ b/doc/html/a00129.html
@@ -4,14 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00233.html">tbb::tbb_allocator< void ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00233.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00233.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00233.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_allocator< void > Member List</h1>This is the complete list of members for <a class="el" href="a00267.html">tbb::tbb_allocator< void ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>const_pointer</b> typedef (defined in <a class="el" href="a00267.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>pointer</b> typedef (defined in <a class="el" href="a00267.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>value_type</b> typedef (defined in <a class="el" href="a00267.html">tbb::tbb_allocator< void ></a>)</td><td><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a></td><td></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00131.html b/doc/html/a00131.html
index 9d4b242..3ee1e17 100644
--- a/doc/html/a00131.html
+++ b/doc/html/a00131.html
@@ -4,20 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00237.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00237.html#a0">interval_t</a>()</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a1">interval_t</a>(double sec)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n2">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a3">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n1">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n3">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a4">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a2">seconds</a>() const </td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::tick_count</b> (defined in <a class="el" href="a00237.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::bad_last_alloc Member List</h1>This is the complete list of members for <a class="el" href="a00194.html">tbb::bad_last_alloc</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>what</b>() const (defined in <a class="el" href="a00194.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00194.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~bad_last_alloc</b>() (defined in <a class="el" href="a00194.html">tbb::bad_last_alloc</a>)</td><td><a class="el" href="a00194.html">tbb::bad_last_alloc</a></td><td><code> [inline, virtual]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00132.html b/doc/html/a00132.html
new file mode 100644
index 0000000..22b55c0
--- /dev/null
+++ b/doc/html/a00132.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_exception Member List</h1>This is the complete list of members for <a class="el" href="a00268.html">tbb::tbb_exception</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00268.html#a1">destroy</a>()=0</td><td><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00268.html#a0">move</a>()=0</td><td><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00268.html#a3">name</a>() const =0</td><td><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00268.html#a2">throw_self</a>()=0</td><td><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00268.html#a4">what</a>() const =0</td><td><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td><code> [pure virtual]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00133.html b/doc/html/a00133.html
new file mode 100644
index 0000000..dbf6b01
--- /dev/null
+++ b/doc/html/a00133.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::captured_exception Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::captured_exception</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>captured_exception</b>(const captured_exception &src) (defined in <a class="el" href="a00200.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>captured_exception</b>(const char *name, const char *info) (defined in <a class="el" href="a00200.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00200.html#a5">destroy</a>()</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00200.html#a4">move</a>()</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00200.html#a7">name</a>() const </td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const captured_exception &src) (defined in <a class="el" href="a00200.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00200.html#a6">throw_self</a>()</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00200.html#a8">what</a>() const </td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~captured_exception</b>() (defined in <a class="el" href="a00200.html">tbb::captured_exception</a>)</td><td><a class="el" href="a00200.html">tbb::captured_exception</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00134.html b/doc/html/a00134.html
new file mode 100644
index 0000000..598e3b4
--- /dev/null
+++ b/doc/html/a00134.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::movable_exception< ExceptionData > Member List</h1>This is the complete list of members for <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>data</b>() (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>data</b>() const (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#a9">destroy</a>()</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>movable_exception</b>(const ExceptionData &data) (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>movable_exception</b>(const movable_exception &src) (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#a8">move</a>()</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#p0">my_exception_data</a></td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [protected]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#a6">name</a>() const </td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator=</b>(const movable_exception &src) (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#a10">throw_self</a>()</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00226.html#a7">what</a>() const </td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline, virtual]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~movable_exception</b>() (defined in <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>)</td><td><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00115.html b/doc/html/a00135.html
similarity index 67%
rename from doc/html/a00115.html
rename to doc/html/a00135.html
index 3afc6ce..4a0d9f2 100644
--- a/doc/html/a00115.html
+++ b/doc/html/a00135.html
@@ -4,15 +4,15 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::AtomicBackoff Member List</h1>This is the complete list of members for <a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>AtomicBackoff</b>() (defined in <a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00166.html#a1">pause</a>()</td><td><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::AtomicBackoff Member List</h1>This is the complete list of members for <a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>AtomicBackoff</b>() (defined in <a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>bounded_pause</b>() (defined in <a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00192.html#a1">pause</a>()</td><td><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>reset</b>() (defined in <a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a>)</td><td><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00001.html b/doc/html/a00142.html
similarity index 59%
copy from doc/html/a00001.html
copy to doc/html/a00142.html
index 97ab900..cd8bdc0 100644
--- a/doc/html/a00001.html
+++ b/doc/html/a00142.html
@@ -4,13 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::aligned_space< T, N > Member List</h1>This is the complete list of members for <a class="el" href="a00164.html">tbb::aligned_space< T, N ></a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00164.html#a0">begin</a>()</td><td><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00164.html#a1">end</a>()</td><td><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::work_around_alignment_bug< Size, T > Member List</h1>This is the complete list of members for <a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>alignment</b> (defined in <a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a>)</td><td><a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td><code> [static]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00067.html b/doc/html/a00144.html
similarity index 65%
rename from doc/html/a00067.html
rename to doc/html/a00144.html
index f073941..b4528fc 100644
--- a/doc/html/a00067.html
+++ b/doc/html/a00144.html
@@ -4,12 +4,12 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::pre_scan_tag Member List</h1>This is the complete list of members for <a class="el" href="a00207.html">tbb::pre_scan_tag</a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>is_final_scan</b>() (defined in <a class="el" href="a00207.html">tbb::pre_scan_tag</a>)</td><td><a class="el" href="a00207.html">tbb::pre_scan_tag</a></td><td><code> [inline, static]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::no_assign Member List</h1>This is the complete list of members for <a class="el" href="a00229.html">tbb::internal::no_assign</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00229.html#a0">no_assign</a>()</td><td><a class="el" href="a00229.html">tbb::internal::no_assign</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00122.html b/doc/html/a00145.html
similarity index 68%
copy from doc/html/a00122.html
copy to doc/html/a00145.html
index b1b079c..2ae5612 100644
--- a/doc/html/a00122.html
+++ b/doc/html/a00145.html
@@ -4,12 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::no_copy Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::internal::no_copy</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::no_copy Member List</h1>This is the complete list of members for <a class="el" href="a00230.html">tbb::internal::no_copy</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00229.html#a0">no_assign</a>()</td><td><a class="el" href="a00229.html">tbb::internal::no_assign</a></td><td><code> [inline, private]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00230.html#a0">no_copy</a>()</td><td><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00126.html b/doc/html/a00149.html
similarity index 69%
rename from doc/html/a00126.html
rename to doc/html/a00149.html
index 1036ccc..a2c252b 100644
--- a/doc/html/a00126.html
+++ b/doc/html/a00149.html
@@ -4,15 +4,15 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::thread_closure_1< F, X > Member List</h1>This is the complete list of members for <a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a>, including all inherited members.<p><table>
- <tr bgcolor="#f0f0f0"><td><b>arg1</b> (defined in <a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td><td></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>function</b> (defined in <a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td><td></td></tr>
- <tr class="memlist"><td><a class="el" href="a00235.html#e0">start_routine</a>(void *c)</td><td><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td><td><code> [inline, static]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>thread_closure_1</b>(const F &f, const X &x) (defined in <a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::thread_closure_1< F, X > Member List</h1>This is the complete list of members for <a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a>, including all inherited members.<p><table>
+ <tr bgcolor="#f0f0f0"><td><b>arg1</b> (defined in <a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>function</b> (defined in <a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td><td></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00271.html#e0">start_routine</a>(void *c)</td><td><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td><td><code> [inline, static]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>thread_closure_1</b>(const F &f, const X &x) (defined in <a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a>)</td><td><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00151.html b/doc/html/a00151.html
new file mode 100644
index 0000000..fea81f1
--- /dev/null
+++ b/doc/html/a00151.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Member List</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::tbb_thread_v3 Member List</h1>This is the complete list of members for <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a7">detach</a>()</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>get_id</b>() const (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#e0">hardware_concurrency</a>()</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a6">join</a>()</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>joinable</b>() const (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>move_v3</b> (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>native_handle</b>() (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>native_handle_type</b> typedef (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>operator=</b>(tbb_thread_v3 &x) (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::swap</b> (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a0">tbb_thread_v3</a>()</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a1">tbb_thread_v3</a>(F f)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline, explicit]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a2">tbb_thread_v3</a>(F f, X x)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00270.html#a3">tbb_thread_v3</a>(F f, X x, Y y)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>~tbb_thread_v3</b>() (defined in <a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>)</td><td><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td><code> [inline]</code></td></tr>
+</table><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00130.html b/doc/html/a00153.html
similarity index 68%
rename from doc/html/a00130.html
rename to doc/html/a00153.html
index 1af26df..8b06288 100644
--- a/doc/html/a00130.html
+++ b/doc/html/a00153.html
@@ -4,14 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00236.html">tbb::tick_count</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00236.html#e0">now</a>()</td><td><a class="el" href="a00236.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00236.html#n0">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00236.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00236.html#a0">tick_count</a>()</td><td><a class="el" href="a00236.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tick_count Member List</h1>This is the complete list of members for <a class="el" href="a00272.html">tbb::tick_count</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00272.html#e0">now</a>()</td><td><a class="el" href="a00272.html">tbb::tick_count</a></td><td><code> [inline, static]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00272.html#n0">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00272.html">tbb::tick_count</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00272.html#a0">tick_count</a>()</td><td><a class="el" href="a00272.html">tbb::tick_count</a></td><td><code> [inline]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00131.html b/doc/html/a00154.html
similarity index 59%
copy from doc/html/a00131.html
copy to doc/html/a00154.html
index 9d4b242..5cfc33c 100644
--- a/doc/html/a00131.html
+++ b/doc/html/a00154.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00237.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00237.html#a0">interval_t</a>()</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a1">interval_t</a>(double sec)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n2">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a3">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n1">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#n3">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a4">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr class="memlist"><td><a class="el" href="a00237.html#a2">seconds</a>() const </td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
- <tr bgcolor="#f0f0f0"><td><b>tbb::tick_count</b> (defined in <a class="el" href="a00237.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tick_count::interval_t Member List</h1>This is the complete list of members for <a class="el" href="a00273.html">tbb::tick_count::interval_t</a>, including all inherited members.<p><table>
+ <tr class="memlist"><td><a class="el" href="a00273.html#a0">interval_t</a>()</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#a1">interval_t</a>(double sec)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [inline, explicit]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#n2">operator+</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#a3">operator+=</a>(const interval_t &i)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#n1">operator-</a>(const tick_count &t1, const tick_count &t0)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#n3">operator-</a>(const interval_t &i, const interval_t &j)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#a4">operator-=</a>(const interval_t &i)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+ <tr class="memlist"><td><a class="el" href="a00273.html#a2">seconds</a>() const </td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [inline]</code></td></tr>
+ <tr bgcolor="#f0f0f0"><td><b>tbb::tick_count</b> (defined in <a class="el" href="a00273.html">tbb::tick_count::interval_t</a>)</td><td><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td><code> [friend]</code></td></tr>
</table><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00162.html b/doc/html/a00162.html
deleted file mode 100644
index da740ff..0000000
--- a/doc/html/a00162.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::affinity_partitioner Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::affinity_partitioner Class Reference</h1>An affinity partitioner.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00299.html">partitioner.h</a>></code>
-<p>
-Inherits <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>.
-<p>
-Inheritance diagram for tbb::affinity_partitioner:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00085.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::affinity_partitioner::internal::start_for"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::affinity_partitioner::internal::start_reduce_with_affinity"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce_with_affinity</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::affinity_partitioner::internal::start_scan"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::affinity_partitioner::internal::affinity_partition_type"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::affinity_partition_type</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-An affinity partitioner.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00299.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00163.html b/doc/html/a00163.html
deleted file mode 100644
index 2a7016f..0000000
--- a/doc/html/a00163.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::affinity_partitioner_base_v3 Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::affinity_partitioner_base_v3 Class Reference</h1>Defines entry points into tbb run-time library;.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00299.html">partitioner.h</a>></code>
-<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
-<p>
-Inherited by <a class="el" href="a00162.html">tbb::affinity_partitioner</a><code> [private]</code>.
-<p>
-Inheritance diagram for tbb::internal::affinity_partitioner_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::affinity_partitioner_base_v3::tbb::affinity_partitioner"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html#n0">tbb::affinity_partitioner</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::affinity_partitioner_base_v3::affinity_partition_type"></a>
-class </td><td class="memItemRight" valign="bottom"><b>affinity_partition_type</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Defines entry points into tbb run-time library;.
-<p>
-The entry points are the constructor and destructor.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00299.html">partitioner.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00164.html b/doc/html/a00164.html
deleted file mode 100644
index 4afd690..0000000
--- a/doc/html/a00164.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::aligned_space< T, N > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::aligned_space< T, N > Class Template Reference</h1>Block of space aligned sufficiently to construct an array T with N elements.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00283.html">aligned_space.h</a>></code>
-<p>
-<a href="a00001.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::aligned_space::begin"></a>
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a0">begin</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to beginning of array. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::aligned_space::end"></a>
-T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html#a1">end</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to one past last element in array. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, size_t N><br>
- class tbb::aligned_space< T, N ></h3>
-
-Block of space aligned sufficiently to construct an array T with N elements.
-<p>
-The elements are not constructed or destroyed by this class.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00283.html">aligned_space.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00166.html b/doc/html/a00166.html
deleted file mode 100644
index af963b7..0000000
--- a/doc/html/a00166.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::AtomicBackoff Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::AtomicBackoff Class Reference</h1>Class that implements exponential backoff.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00312.html">tbb_machine.h</a>></code>
-<p>
-<a href="a00115.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::AtomicBackoff::pause"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html#a1">pause</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pause for a while. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::AtomicBackoff::bounded_pause"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>bounded_pause</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::AtomicBackoff::reset"></a>
-void </td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Class that implements exponential backoff.
-<p>
-See implementation of SpinwaitWhileEq for an example.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00312.html">tbb_machine.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00169.html b/doc/html/a00169.html
deleted file mode 100644
index 15c1f4d..0000000
--- a/doc/html/a00169.html
+++ /dev/null
@@ -1,257 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range< Value > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range< Value > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A range over which to iterate.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00285.html">blocked_range.h</a>></code>
-<p>
-<a href="a00013.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#w0">const_iterator</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a value. <a href="#w0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range::size_type"></a>
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#w1">size_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a0">blocked_range</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct range with default-constructed values for begin and end. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range::blocked_range"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a1">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00169.html#w1">size_type</a> grainsize_=1)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct range over half-open interval [begin,end), with the given grainsize. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range::begin"></a>
-<a class="el" href="a00169.html#w0">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a2">begin</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Beginning of range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range::end"></a>
-<a class="el" href="a00169.html#w0">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a3">end</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">One past last value in range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00169.html#w1">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a4">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of the range. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range::grainsize"></a>
-<a class="el" href="a00169.html#w1">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a5">grainsize</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a6">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a7">is_divisible</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible. <a href="#a7"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html#a8">blocked_range</a> (<a class="el" href="a00169.html">blocked_range</a> &r, <a class="el" href="a00221.html">split</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range. <a href="#a8"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::blocked_range::blocked_range2d"></a>
-class </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::blocked_range::blocked_range3d"></a>
-class </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Value><br>
- class tbb::blocked_range< Value ></h3>
-
-A range over which to iterate.
-<p>
-<hr><h2>Member Typedef Documentation</h2>
-<a class="anchor" name="w0" doxytag="tbb::blocked_range::const_iterator"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">typedef Value <a class="el" href="a00169.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00169.html#w0">const_iterator</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Type of a value.
-<p>
-Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00169.html">blocked_range</a> as an STL container. </td>
- </tr>
-</table>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::blocked_range::blocked_range"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00169.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00169.html">blocked_range</a> </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Construct range with default-constructed values for begin and end.
-<p>
-Requires that Value have a default constructor. </td>
- </tr>
-</table>
-<a class="anchor" name="a8" doxytag="tbb::blocked_range::blocked_range"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00169.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00169.html">blocked_range</a> </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00169.html">blocked_range</a>< Value > & </td>
- <td class="mdname" nowrap> <em>r</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="a00221.html">split</a> </td>
- <td class="mdname" nowrap></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Split range.
-<p>
-The new Range *this has the second half, the old range r has the first half. Unspecified if <a class="el" href="a00169.html#a3">end()</a><<a class="el" href="a00169.html#a2">begin()</a> or !is_divisible(). </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a7" doxytag="tbb::blocked_range::is_divisible"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00169.html">tbb::blocked_range</a>< Value >::is_divisible </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap> const<code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-True if range is divisible.
-<p>
-Unspecified if <a class="el" href="a00169.html#a3">end()</a><<a class="el" href="a00169.html#a2">begin()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a4" doxytag="tbb::blocked_range::size"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00169.html#w1">size_type</a> <a class="el" href="a00169.html">tbb::blocked_range</a>< Value >::size </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap> const<code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Size of the range.
-<p>
-Unspecified if <a class="el" href="a00169.html#a3">end()</a><<a class="el" href="a00169.html#a2">begin()</a>. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00285.html">blocked_range.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00170.html b/doc/html/a00170.html
deleted file mode 100644
index 2ac8404..0000000
--- a/doc/html/a00170.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A 2-dimensional range that models the Range concept.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00286.html">blocked_range2d.h</a>></code>
-<p>
-<a href="a00014.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::blocked_range2d::row_range_type"></a>
-typedef <a class="el" href="a00169.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#w0">row_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range2d::col_range_type"></a>
-typedef <a class="el" href="a00169.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00169.html#w1">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00169.html#w1">col_range_type::size_type</a> col_grainsize)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range2d::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a2">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range2d::is_divisible"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a3">is_divisible</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00170.html">blocked_range2d</a> &r, <a class="el" href="a00221.html">split</a>)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range2d::rows"></a>
-const <a class="el" href="a00169.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a5">rows</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range2d::cols"></a>
-const <a class="el" href="a00169.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html#a6">cols</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename RowValue, typename ColValue = RowValue><br>
- class tbb::blocked_range2d< RowValue, ColValue ></h3>
-
-A 2-dimensional range that models the Range concept.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00286.html">blocked_range2d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00171.html b/doc/html/a00171.html
deleted file mode 100644
index d89b3d5..0000000
--- a/doc/html/a00171.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A 3-dimensional range that models the Range concept.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00287.html">blocked_range3d.h</a>></code>
-<p>
-<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::blocked_range3d::page_range_type"></a>
-typedef <a class="el" href="a00169.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#w0">page_range_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range3d::row_range_type"></a>
-typedef <a class="el" href="a00169.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><b>row_range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::blocked_range3d::col_range_type"></a>
-typedef <a class="el" href="a00169.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00169.html#w1">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00169.html#w1">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00169.html#w1">col_range_type::size_type</a> col_grainsize)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range3d::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#a2">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range3d::is_divisible"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#a3">is_divisible</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
- </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00171.html">blocked_range3d</a> &r, <a class="el" href="a00221.html">split</a>)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range3d::pages"></a>
-const <a class="el" href="a00169.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#a5">pages</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The pages of the iteration space. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range3d::rows"></a>
-const <a class="el" href="a00169.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#a6">rows</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::blocked_range3d::cols"></a>
-const <a class="el" href="a00169.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#a7">cols</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br>
- class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
-
-A 3-dimensional range that models the Range concept.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00287.html">blocked_range3d.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00174.html b/doc/html/a00174.html
deleted file mode 100644
index f470489..0000000
--- a/doc/html/a00174.html
+++ /dev/null
@@ -1,649 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</h1>Unordered map from Key to T.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
-<p>
-Inherits <a class="el" href="a00195.html">tbb::internal::hash_map_base</a>.
-<p>
-Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00024.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::key_type"></a>
-typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_hash_map::mapped_type"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_hash_map::value_type"></a>
-typedef std::pair< const Key,<br>
- T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_hash_map::size_type"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::concurrent_hash_map::difference_type"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_hash_map::pointer"></a>
-typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_hash_map::const_pointer"></a>
-typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_hash_map::reference"></a>
-typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w8" doxytag="tbb::concurrent_hash_map::const_reference"></a>
-typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w9" doxytag="tbb::concurrent_hash_map::iterator"></a>
-typedef <a class="el" href="a00196.html">internal::hash_map_iterator</a><<br>
- <a class="el" href="a00174.html">concurrent_hash_map</a>, value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w10" doxytag="tbb::concurrent_hash_map::const_iterator"></a>
-typedef <a class="el" href="a00196.html">internal::hash_map_iterator</a><<br>
- <a class="el" href="a00174.html">concurrent_hash_map</a>, const <br>
-value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w11" doxytag="tbb::concurrent_hash_map::range_type"></a>
-typedef <a class="el" href="a00197.html">internal::hash_map_range</a><<br>
- <a class="el" href="a00196.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w12" doxytag="tbb::concurrent_hash_map::const_range_type"></a>
-typedef <a class="el" href="a00197.html">internal::hash_map_range</a><<br>
- <a class="el" href="a00196.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w13" doxytag="tbb::concurrent_hash_map::allocator_type"></a>
-typedef A </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a0">concurrent_hash_map</a> (const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a1">concurrent_hash_map</a> (const <a class="el" href="a00174.html">concurrent_hash_map</a> &table, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
-template<typename I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#a2">concurrent_hash_map</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_hash_map::operator="></a>
-<a class="el" href="a00174.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a3">operator=</a> (const <a class="el" href="a00174.html">concurrent_hash_map</a> &table)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_hash_map::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a4">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::concurrent_hash_map::~concurrent_hash_map"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a5">~concurrent_hash_map</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear table and destroy it. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::concurrent_hash_map::range"></a>
-<a class="el" href="a00197.html">range_type</a> </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::concurrent_hash_map::range"></a>
-<a class="el" href="a00197.html">const_range_type</a> </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::concurrent_hash_map::begin"></a>
-<a class="el" href="a00196.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::concurrent_hash_map::end"></a>
-<a class="el" href="a00196.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_hash_map::begin"></a>
-<a class="el" href="a00196.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_hash_map::end"></a>
-<a class="el" href="a00196.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::concurrent_hash_map::equal_range"></a>
-std::pair< <a class="el" href="a00196.html">iterator</a>, <a class="el" href="a00196.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_hash_map::equal_range"></a>
-std::pair< <a class="el" href="a00196.html">const_iterator</a>,<br>
- <a class="el" href="a00196.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a14">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <a href="#a14"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_hash_map::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a15">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00174.html#a14">size()</a>==0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::concurrent_hash_map::max_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a16">max_size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on size. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::concurrent_hash_map::get_allocator"></a>
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a17">get_allocator</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a18" doxytag="tbb::concurrent_hash_map::swap"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a18">swap</a> (<a class="el" href="a00174.html">concurrent_hash_map</a> &table)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::concurrent_hash_map::count"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a19">count</a> (const Key &key) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return count of items (0 or 1). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a20">find</a> (<a class="el" href="a00176.html">const_accessor</a> &result, const Key &key) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a read lock on the item. <a href="#a20"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a21">find</a> (<a class="el" href="a00175.html">accessor</a> &result, const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a write lock on the item. <a href="#a21"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a22">insert</a> (<a class="el" href="a00176.html">const_accessor</a> &result, const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a read lock on the item. <a href="#a22"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a23">insert</a> (<a class="el" href="a00175.html">accessor</a> &result, const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a write lock on the item. <a href="#a23"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a24">insert</a> (<a class="el" href="a00176.html">const_accessor</a> &result, const value_type &value)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item. <a href="#a24"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a25">insert</a> (<a class="el" href="a00175.html">accessor</a> &result, const value_type &value)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item. <a href="#a25"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a26">insert</a> (const value_type &value)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already. <a href="#a26"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a27" doxytag="tbb::concurrent_hash_map::insert"></a>
-template<typename I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#a27">insert</a> (I first, I last)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert range [first, last). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a28">erase</a> (const Key &key)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item. <a href="#a28"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a29">erase</a> (<a class="el" href="a00176.html">const_accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00176.html">const_accessor</a>. <a href="#a29"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html#a30">erase</a> (<a class="el" href="a00175.html">accessor</a> &item_accessor)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor. <a href="#a30"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_hash_map::internal::hash_map_iterator"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::concurrent_hash_map::internal::hash_map_range"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::concurrent_hash_map::node"></a>
-struct </td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::concurrent_hash_map::const_accessor"></a>
-class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::concurrent_hash_map::chain"></a>
-struct </td><td class="memItemRight" valign="bottom"><b>chain</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::concurrent_hash_map::segment"></a>
-struct </td><td class="memItemRight" valign="bottom"><b>segment</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, A ></h3>
-
-Unordered map from Key to T.
-<p>
-<a class="el" href="a00174.html">concurrent_hash_map</a> is associative container with concurrent access.<p>
-<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>
-<dl compact><dt><b>Exception Safety</b></dt><dd><ul>
-<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li><li>If exception happens during <a class="el" href="a00174.html#a22">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li><li>If exception happens during <a class="el" href="a00174.html#a3">operator=()</a> operation, the container can have a part of source items, and meth [...]
-</dd></dl>
-<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
-<li>Fixed exception-safety</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Added constructor from a range of iterators</li><li>Added several new overloaded <a class="el" href="a00174.html#a22">insert()</a> methods</li><li>Added <a class="el" href="a00174.html#a17">get_allocator()</a></li><li>Added <a class="el" href="a00174.html#a18">swap()</a></li><li>Added <a class="el" href="a00174.html#a19">count()</a></li><li>Added overloaded <a [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a30" doxytag="tbb::concurrent_hash_map::erase"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00175.html">accessor</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>item_accessor</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Erase item by accessor.
-<p>
-Return true if item was erased by particularly this call. </td>
- </tr>
-</table>
-<a class="anchor" name="a29" doxytag="tbb::concurrent_hash_map::erase"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00176.html">const_accessor</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>item_accessor</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Erase item by <a class="el" href="a00176.html">const_accessor</a>.
-<p>
-Return true if item was erased by particularly this call. </td>
- </tr>
-</table>
-<a class="anchor" name="a28" doxytag="tbb::concurrent_hash_map::erase"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const Key & </td>
- <td class="mdname1" valign="top" nowrap> <em>key</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Erase item.
-<p>
-Return true if item was erased by particularly this call. </td>
- </tr>
-</table>
-<a class="anchor" name="a21" doxytag="tbb::concurrent_hash_map::find"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00175.html">accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const Key & </td>
- <td class="mdname" nowrap> <em>key</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Find item and acquire a write lock on the item.
-<p>
-Return true if item is found, false otherwise. </td>
- </tr>
-</table>
-<a class="anchor" name="a20" doxytag="tbb::concurrent_hash_map::find"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00176.html">const_accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const Key & </td>
- <td class="mdname" nowrap> <em>key</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"> const<code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Find item and acquire a read lock on the item.
-<p>
-Return true if item is found, false otherwise. </td>
- </tr>
-</table>
-<a class="anchor" name="a26" doxytag="tbb::concurrent_hash_map::insert"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const value_type & </td>
- <td class="mdname1" valign="top" nowrap> <em>value</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Insert item by copying if there is no such key present already.
-<p>
-Returns true if item is inserted. </td>
- </tr>
-</table>
-<a class="anchor" name="a25" doxytag="tbb::concurrent_hash_map::insert"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00175.html">accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const value_type & </td>
- <td class="mdname" nowrap> <em>value</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Insert item by copying if there is no such key present already and acquire a write lock on the item.
-<p>
-Returns true if item is new. </td>
- </tr>
-</table>
-<a class="anchor" name="a24" doxytag="tbb::concurrent_hash_map::insert"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00176.html">const_accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const value_type & </td>
- <td class="mdname" nowrap> <em>value</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Insert item by copying if there is no such key present already and acquire a read lock on the item.
-<p>
-Returns true if item is new. </td>
- </tr>
-</table>
-<a class="anchor" name="a23" doxytag="tbb::concurrent_hash_map::insert"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00175.html">accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const Key & </td>
- <td class="mdname" nowrap> <em>key</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Insert item (if not already present) and acquire a write lock on the item.
-<p>
-Returns true if item is new. </td>
- </tr>
-</table>
-<a class="anchor" name="a22" doxytag="tbb::concurrent_hash_map::insert"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00176.html">const_accessor</a> & </td>
- <td class="mdname" nowrap> <em>result</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const Key & </td>
- <td class="mdname" nowrap> <em>key</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Insert item (if not already present) and acquire a read lock on the item.
-<p>
-Returns true if item is new. </td>
- </tr>
-</table>
-<a class="anchor" name="a14" doxytag="tbb::concurrent_hash_map::size"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Key, typename T, typename HashCompare, typename A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A >::size_type <a class="el" href="a00174.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::size </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap> const</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Number of items in table.
-<p>
-Be aware that this method is relatively slow compared to the typical <a class="el" href="a00174.html#a14">size()</a> method for an STL container. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00175.html b/doc/html/a00175.html
deleted file mode 100644
index 6380b99..0000000
--- a/doc/html/a00175.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</h1>Allows write access to elements and combines data access, locking, and garbage collection.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
-<p>
-Inherits <a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>.
-<p>
-Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00026.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::accessor::value_type"></a>
-typedef std::pair< const Key,<br>
- T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#w0">value_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::accessor::operator *"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#a0">operator *</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::accessor::operator->"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html#a1">operator-></a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</h3>
-
-Allows write access to elements and combines data access, locking, and garbage collection.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00176.html b/doc/html/a00176.html
deleted file mode 100644
index 2888a8b..0000000
--- a/doc/html/a00176.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</h1>Combines data access, locking, and garbage collection.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
-<p>
-Inherited by <a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>.
-<p>
-Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::const_accessor::value_type"></a>
-typedef const std::pair< const <br>
-Key, T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#w0">value_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::const_accessor::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a0">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::const_accessor::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a1">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::concurrent_hash_map::const_accessor::operator *"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a2">operator *</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_hash_map::const_accessor::operator->"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a3">operator-></a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_hash_map::const_accessor::const_accessor"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a4">const_accessor</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::concurrent_hash_map::const_accessor::~const_accessor"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#a5">~const_accessor</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_hash_map::const_accessor::concurrent_hash_map"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::concurrent_hash_map::const_accessor::accessor"></a>
-class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
- class tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</h3>
-
-Combines data access, locking, and garbage collection.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00177.html b/doc/html/a00177.html
deleted file mode 100644
index 515986c..0000000
--- a/doc/html/a00177.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_queue< T, A > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_queue< T, A > Class Template Reference</h1>A high-performance thread-safe queue.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00290.html">concurrent_queue.h</a>></code>
-<p>
-Inherits <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>.
-<p>
-Inheritance diagram for tbb::concurrent_queue< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00034.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_queue::value_type"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w0">value_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_queue::allocator_type"></a>
-typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w1">allocator_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_queue::reference"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w2">reference</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_queue::const_reference"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w3">const_reference</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w4">size_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <a href="#w4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_queue::difference_type"></a>
-typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#w5">difference_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_queue::iterator"></a>
-typedef <a class="el" href="a00180.html">internal::concurrent_queue_iterator</a><<br>
- <a class="el" href="a00177.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_queue::const_iterator"></a>
-typedef <a class="el" href="a00180.html">internal::concurrent_queue_iterator</a><<br>
- <a class="el" href="a00177.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_queue::concurrent_queue"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a0">concurrent_queue</a> (const <a class="el" href="a00177.html#w1">allocator_type</a> &a=<a class="el" href="a00177.html#w1">allocator_type</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_queue::~concurrent_queue"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a1">~concurrent_queue</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::concurrent_queue::push"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a2">push</a> (const T &source)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a3">pop</a> (T &destination)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue. <a href="#a3"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a4">push_if_not_full</a> (const T &source)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a5">pop_if_present</a> (T &destination)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue. <a href="#a5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00177.html#w4">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a6">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops. <a href="#a6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::concurrent_queue::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a7">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00177.html#a6">size()</a><=0. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::concurrent_queue::capacity"></a>
-<a class="el" href="a00177.html#w4">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a8">capacity</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a9">set_capacity</a> (<a class="el" href="a00177.html#w4">size_type</a> capacity)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity. <a href="#a9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_queue::get_allocator"></a>
-<a class="el" href="a00177.html#w1">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a10">get_allocator</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_queue::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#a11">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">clear the queue and release all resources (i.e., pages) <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::concurrent_queue::begin"></a>
-<a class="el" href="a00180.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_queue::end"></a>
-<a class="el" href="a00180.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a14" doxytag="tbb::concurrent_queue::begin"></a>
-<a class="el" href="a00180.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_queue::end"></a>
-<a class="el" href="a00180.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_queue::internal::concurrent_queue_iterator"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, class A><br>
- class tbb::concurrent_queue< T, A ></h3>
-
-A high-performance thread-safe queue.
-<p>
-Multiple threads may each push and pop concurrently. Assignment and copy construction are not allowed.
-<p>
-<hr><h2>Member Typedef Documentation</h2>
-<a class="anchor" name="w4" doxytag="tbb::concurrent_queue::size_type"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">typedef std::ptrdiff_t <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::<a class="el" href="a00177.html#w4">size_type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Integral type for representing size of the queue.
-<p>
-Notice that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="tbb::concurrent_queue::pop"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">void <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::pop </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">T & </td>
- <td class="mdname1" valign="top" nowrap> <em>destination</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Dequeue item from head of queue.
-<p>
-Block until an item becomes available, and then dequeue it. </td>
- </tr>
-</table>
-<a class="anchor" name="a5" doxytag="tbb::concurrent_queue::pop_if_present"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::pop_if_present </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">T & </td>
- <td class="mdname1" valign="top" nowrap> <em>destination</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Attempt to dequeue an item from head of queue.
-<p>
-Does not wait for item to become available. Returns true if successful; false otherwise. </td>
- </tr>
-</table>
-<a class="anchor" name="a4" doxytag="tbb::concurrent_queue::push_if_not_full"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">bool <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::push_if_not_full </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const T & </td>
- <td class="mdname1" valign="top" nowrap> <em>source</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Enqueue an item at tail of queue if queue is not already full.
-<p>
-Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </td>
- </tr>
-</table>
-<a class="anchor" name="a9" doxytag="tbb::concurrent_queue::set_capacity"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">void <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::set_capacity </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00177.html#w4">size_type</a> </td>
- <td class="mdname1" valign="top" nowrap> <em>capacity</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Set the capacity.
-<p>
-Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail, and subsequent push operations to block forever. </td>
- </tr>
-</table>
-<a class="anchor" name="a6" doxytag="tbb::concurrent_queue::size"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00177.html#w4">size_type</a> <a class="el" href="a00177.html">tbb::concurrent_queue</a>< T, A >::size </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap> const<code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Return number of pushes minus number of pops.
-<p>
-Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class="el" href="a00177.html#a8">capacity()</a> if there are push operations in flight. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00290.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00178.html b/doc/html/a00178.html
deleted file mode 100644
index 040b646..0000000
--- a/doc/html/a00178.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_queue_base_v3 Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_base_v3 Class Reference</h1>For internal use only.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00290.html">concurrent_queue.h</a>></code>
-<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
-<p>
-Inherited by <a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>.
-<p>
-Inheritance diagram for tbb::internal::concurrent_queue_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00030.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_base_v3"></a>
- </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_base_v3</b> (size_t <a class="el" href="a00178.html#p2">item_size</a>)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_queue_base_v3::internal_push"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b2">internal_push</a> (const void *src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue item at tail of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_queue_base_v3::internal_pop"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b3">internal_pop</a> (void *dst)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_queue_base_v3::internal_push_if_not_full"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b4">internal_push_if_not_full</a> (const void *src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to enqueue item onto queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b5">internal_pop_if_present</a> (void *dst)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue item from queue. <a href="#b5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6" doxytag="tbb::internal::concurrent_queue_base_v3::internal_size"></a>
-ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b6">internal_size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get size of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b7" doxytag="tbb::internal::concurrent_queue_base_v3::internal_set_capacity"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b7">internal_set_capacity</a> (ptrdiff_t capacity, size_t element_size)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">set the queue capacity <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8" doxytag="tbb::internal::concurrent_queue_base_v3::allocate_page"></a>
-virtual <a class="el" href="a00179.html">page</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b8">allocate_page</a> ()=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">custom allocator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9" doxytag="tbb::internal::concurrent_queue_base_v3::deallocate_page"></a>
-virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b9">deallocate_page</a> (<a class="el" href="a00179.html">page</a> *p)=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">custom de-allocator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b10" doxytag="tbb::internal::concurrent_queue_base_v3::internal_finish_clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b10">internal_finish_clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">free any remaining pages <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b11" doxytag="tbb::internal::concurrent_queue_base_v3::internal_throw_exception"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#b11">internal_throw_exception</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">throw an exception <br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_queue_base_v3::my_capacity"></a>
-ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#p0">my_capacity</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Capacity of the queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p1" doxytag="tbb::internal::concurrent_queue_base_v3::items_per_page"></a>
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#p1">items_per_page</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Always a power of 2. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p2" doxytag="tbb::internal::concurrent_queue_base_v3::item_size"></a>
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html#p2">item_size</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of an item. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_rep"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_rep</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::concurrent_queue_base_v3::micro_queue"></a>
-struct </td><td class="memItemRight" valign="bottom"><b>micro_queue</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::concurrent_queue_base_v3::micro_queue_pop_finalizer"></a>
-class </td><td class="memItemRight" valign="bottom"><b>micro_queue_pop_finalizer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_iterator_rep"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_rep</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_iterator_base_v3"></a>
-class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_base_v3</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-For internal use only.
-<p>
-Type-independent portion of <a class="el" href="a00177.html">concurrent_queue</a>.
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="b5" doxytag="tbb::internal::concurrent_queue_base_v3::internal_pop_if_present"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool tbb::internal::concurrent_queue_base_v3::internal_pop_if_present </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">void * </td>
- <td class="mdname1" valign="top" nowrap> <em>dst</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Attempt to dequeue item from queue.
-<p>
-NULL if there was no item to dequeue. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00290.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00180.html b/doc/html/a00180.html
deleted file mode 100644
index dafc153..0000000
--- a/doc/html/a00180.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_queue_iterator< Container, Value > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00290.html">concurrent_queue.h</a>></code>
-<p>
-Inherits <a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a>.
-<p>
-Inheritance diagram for tbb::internal::concurrent_queue_iterator< Container, Value >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00033.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#a1">concurrent_queue_iterator</a> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::concurrent_queue_iterator::operator="></a>
-<a class="el" href="a00180.html">concurrent_queue_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#a2">operator=</a> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a> &other)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Iterator assignment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::concurrent_queue_iterator::operator *"></a>
-Value & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#a3">operator *</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reference to current item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::concurrent_queue_iterator::operator->"></a>
-Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::concurrent_queue_iterator::operator++"></a>
-<a class="el" href="a00180.html">concurrent_queue_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#a5">operator++</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Advance to next item in queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::concurrent_queue_iterator::operator++"></a>
-Value * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html#a6">operator++</a> (int)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_iterator::::tbb::concurrent_queue"></a>
-class </td><td class="memItemRight" valign="bottom"><b>::tbb::concurrent_queue</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Container, typename Value><br>
- class tbb::internal::concurrent_queue_iterator< Container, Value ></h3>
-
-Meets requirements of a forward iterator for STL.
-<p>
-Value is either the T or const T type of the container.
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a1" doxytag="tbb::internal::concurrent_queue_iterator::concurrent_queue_iterator"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename Container, typename Value> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator</a>< Container, Value >::<a class="el" href="a00180.html">concurrent_queue_iterator</a> </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< Container, typename Container::value_type > & </td>
- <td class="mdname1" valign="top" nowrap> <em>other</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-If Value==Container::value_type, then this routine is the copy constructor. If Value==const Container::value_type, then this routine is a conversion constructor. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00290.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00181.html b/doc/html/a00181.html
deleted file mode 100644
index 79a7848..0000000
--- a/doc/html/a00181.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_queue_iterator_base_v3 Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_iterator_base_v3 Class Reference</h1>Type-independent portion of <a class="el" href="a00180.html">concurrent_queue_iterator</a>.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00290.html">concurrent_queue.h</a>></code>
-<p>
-Inherited by <a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>.
-<p>
-Inheritance diagram for tbb::internal::concurrent_queue_iterator_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00032.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b0">concurrent_queue_iterator_base_v3</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b1">concurrent_queue_iterator_base_v3</a> (const <a class="el" href="a00181.html">concurrent_queue_iterator_base_v3</a> &i)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b2">concurrent_queue_iterator_base_v3</a> (const <a class="el" href="a00178.html">concurrent_queue_base</a> &queue)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct iterator pointing to head of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::assign"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b3">assign</a> (const <a class="el" href="a00181.html">concurrent_queue_iterator_base_v3</a> &i)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::advance"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b4">advance</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Advance iterator one step towards tail of queue. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::~concurrent_queue_iterator_base_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#b5">~concurrent_queue_iterator_base_v3</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::my_item"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html#p0">my_item</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to current item. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::operator=="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n1" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::operator!="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Type-independent portion of <a class="el" href="a00180.html">concurrent_queue_iterator</a>.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00290.html">concurrent_queue.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00182.html b/doc/html/a00182.html
deleted file mode 100644
index cbb71e7..0000000
--- a/doc/html/a00182.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::concurrent_vector< T, A > Class Template Reference</h1>Concurrent vector container
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00291.html">concurrent_vector.h</a>></code>
-<p>
-Inherits <a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>.
-<p>
-Inheritance diagram for tbb::concurrent_vector< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_vector::size_type"></a>
-typedef internal::concurrent_vector_base_v3::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_vector::allocator_type"></a>
-typedef internal::allocator_base<<br>
- T, A >::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_vector::value_type"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_vector::difference_type"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::concurrent_vector::reference"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_vector::const_reference"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_vector::pointer"></a>
-typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_vector::const_pointer"></a>
-typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w8" doxytag="tbb::concurrent_vector::iterator"></a>
-typedef <a class="el" href="a00238.html">internal::vector_iterator</a><<br>
- <a class="el" href="a00182.html">concurrent_vector</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w9" doxytag="tbb::concurrent_vector::const_iterator"></a>
-typedef <a class="el" href="a00238.html">internal::vector_iterator</a><<br>
- <a class="el" href="a00182.html">concurrent_vector</a>, const <br>
-T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w10" doxytag="tbb::concurrent_vector::reverse_iterator"></a>
-typedef std::reverse_iterator<<br>
- <a class="el" href="a00238.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w11" doxytag="tbb::concurrent_vector::const_reverse_iterator"></a>
-typedef std::reverse_iterator<<br>
- <a class="el" href="a00238.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w12" doxytag="tbb::concurrent_vector::range_type"></a>
-typedef generic_range_type<<br>
- <a class="el" href="a00238.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w13" doxytag="tbb::concurrent_vector::const_range_type"></a>
-typedef generic_range_type<<br>
- <a class="el" href="a00238.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a0">concurrent_vector</a> (const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a1">concurrent_vector</a> (const <a class="el" href="a00182.html">concurrent_vector</a> &vector, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
-template<class M> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#a2">concurrent_vector</a> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, M > &vector, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor for vector with different allocator type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a3">concurrent_vector</a> (size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a4">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a5" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
-template<class I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#a5">concurrent_vector</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::concurrent_vector::operator="></a>
-<a class="el" href="a00182.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a6">operator=</a> (const <a class="el" href="a00182.html">concurrent_vector</a> &vector)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a7" doxytag="tbb::concurrent_vector::operator="></a>
-template<class M> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00182.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#a7">operator=</a> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, M > &vector)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment for vector with different allocator type. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a8">grow_by</a> (size_type delta)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements. <a href="#a8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a9">grow_by</a> (size_type delta, const_reference t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements using copying constuctor. <a href="#a9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_vector::grow_to_at_least"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a10">grow_to_at_least</a> (size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow array until it has at least n elements. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_vector::push_back"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a11">push_back</a> (const_reference item)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Push item. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a12">operator[]</a> (size_type index)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. <a href="#a12"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_vector::operator[]"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a13">operator[]</a> (size_type index) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a14" doxytag="tbb::concurrent_vector::at"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a14">at</a> (size_type index)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_vector::at"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a15">at</a> (size_type index) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::concurrent_vector::range"></a>
-range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a16">range</a> (size_t grainsize=1)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get range for iterating with parallel algorithms. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::concurrent_vector::range"></a>
-const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a17">range</a> (size_t grainsize=1) const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const range for iterating with parallel algorithms. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a18" doxytag="tbb::concurrent_vector::size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a18">size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::concurrent_vector::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a19">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a20" doxytag="tbb::concurrent_vector::capacity"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a20">capacity</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a21">reserve</a> (size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate enough space to grow to size n without having to allocate more memory later. <a href="#a21"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a22" doxytag="tbb::concurrent_vector::compact"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a22">compact</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. Returns true if optimization occurred. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a23" doxytag="tbb::concurrent_vector::max_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a23">max_size</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on argument to reserve. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a24" doxytag="tbb::concurrent_vector::begin"></a>
-<a class="el" href="a00238.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a24">begin</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">start iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a25" doxytag="tbb::concurrent_vector::end"></a>
-<a class="el" href="a00238.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a25">end</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a26" doxytag="tbb::concurrent_vector::begin"></a>
-<a class="el" href="a00238.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a26">begin</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a27" doxytag="tbb::concurrent_vector::end"></a>
-<a class="el" href="a00238.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a27">end</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a28" doxytag="tbb::concurrent_vector::rbegin"></a>
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a28">rbegin</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse start iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a29" doxytag="tbb::concurrent_vector::rend"></a>
-reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a29">rend</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse end iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a30" doxytag="tbb::concurrent_vector::rbegin"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a30">rbegin</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a31" doxytag="tbb::concurrent_vector::rend"></a>
-const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a31">rend</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32" doxytag="tbb::concurrent_vector::front"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a32">front</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">the first item <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a33" doxytag="tbb::concurrent_vector::front"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a33">front</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">the first item const <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a34" doxytag="tbb::concurrent_vector::back"></a>
-reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a34">back</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">the last item <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a35" doxytag="tbb::concurrent_vector::back"></a>
-const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a35">back</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">the last item const <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36" doxytag="tbb::concurrent_vector::get_allocator"></a>
-allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a36">get_allocator</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a37" doxytag="tbb::concurrent_vector::assign"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a37">assign</a> (size_type n, const_reference t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">assign n items by copying t item <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a38" doxytag="tbb::concurrent_vector::assign"></a>
-template<class I> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#a38">assign</a> (I first, I last)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">assign range [first, last) <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a39" doxytag="tbb::concurrent_vector::swap"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a39">swap</a> (<a class="el" href="a00182.html">concurrent_vector</a> &vector)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a40" doxytag="tbb::concurrent_vector::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a40">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear container. Not thread safe. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a41" doxytag="tbb::concurrent_vector::~concurrent_vector"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html#a41">~concurrent_vector</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a42" doxytag="tbb::concurrent_vector::internal_vector_base"></a>
-const <a class="el" href="a00183.html">internal::concurrent_vector_base_v3</a> & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_vector::internal::vector_iterator"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T, class A><br>
- class tbb::concurrent_vector< T, A ></h3>
-
-Concurrent vector container
-<p>
-<a class="el" href="a00182.html">concurrent_vector</a> is a container having the following main properties:<ul>
-<li>It provides random indexed access to its elements. The index of the first element is 0.</li><li>It ensures safe concurrent growing its size (different threads can safely append new elements).</li><li>Adding new elements does not invalidate existing iterators and does not change indices of existing items.</li></ul>
-<p>
-<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>
-<dl compact><dt><b>Exception Safety</b></dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>
-<li>Throwing an exception is forbidden for destructor of T.</li><li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li></ul>
-Otherwise, the program's behavior is undefined. </dd></dl>
-<dl compact><dt><b></b></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>
-<li>There are no guaranties that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li><li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li><li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li><li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exc [...]
-If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>
-<dl compact><dt><b>Fragmentation</b></dt><dd>Unlike an STL vector, a <a class="el" href="a00182.html">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be o [...]
-<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
-<li>Implemented exception-safety guaranties</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Faster index calculation</li><li>First growth call specifies a number of segments to be merged in the first allocation.</li><li>Fixed memory blow up for swarm of vector's instances of small size</li><li>Added <a class="el" href="a00182.html#a9">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li> [...]
-</dd></dl>
-
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a9" doxytag="tbb::concurrent_vector::grow_by"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">size_type <a class="el" href="a00182.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">size_type </td>
- <td class="mdname" nowrap> <em>delta</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const_reference </td>
- <td class="mdname" nowrap> <em>t</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Grow by "delta" elements using copying constuctor.
-<p>
-Returns old size. </td>
- </tr>
-</table>
-<a class="anchor" name="a8" doxytag="tbb::concurrent_vector::grow_by"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">size_type <a class="el" href="a00182.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">size_type </td>
- <td class="mdname1" valign="top" nowrap> <em>delta</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Grow by "delta" elements.
-<p>
-Returns old size. </td>
- </tr>
-</table>
-<a class="anchor" name="a12" doxytag="tbb::concurrent_vector::operator[]"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">reference <a class="el" href="a00182.html">tbb::concurrent_vector</a>< T, A >::operator[] </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">size_type </td>
- <td class="mdname1" valign="top" nowrap> <em>index</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Get reference to element at given index.
-<p>
-This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index<<a class="el" href="a00182.html#a18">size()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a21" doxytag="tbb::concurrent_vector::reserve"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" colspan="4">
-template<typename T, class A> </td>
- </tr>
- <tr>
- <td class="md" nowrap valign="top">void <a class="el" href="a00182.html">tbb::concurrent_vector</a>< T, A >::reserve </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">size_type </td>
- <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Allocate enough space to grow to size n without having to allocate more memory later.
-<p>
-Like most of the methods provided for STL compatibility, this method is *not* thread safe. The capacity afterwards may be bigger than the requested reservation. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00291.html">concurrent_vector.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00183.html b/doc/html/a00183.html
deleted file mode 100644
index d91029a..0000000
--- a/doc/html/a00183.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_vector_base_v3 Class Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_vector_base_v3 Class Reference</h1>Base class of concurrent vector implementation.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00291.html">concurrent_vector.h</a>></code>
-<p>
-Inherited by <a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a><code> [private]</code>.
-<p>
-Inheritance diagram for tbb::internal::concurrent_vector_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00036.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Protected Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x0" doxytag="tbb::internal::concurrent_vector_base_v3::segment_index_t"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>segment_index_t</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x1" doxytag="tbb::internal::concurrent_vector_base_v3::size_type"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x2" doxytag="tbb::internal::concurrent_vector_base_v3::internal_array_op1"></a>
-typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#x2">internal_array_op1</a> )(void *begin, size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An operation on an n-element array starting at begin. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x3" doxytag="tbb::internal::concurrent_vector_base_v3::internal_array_op2"></a>
-typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#x3">internal_array_op2</a> )(void *dst, const void *src, size_type n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An operation on n-element destination array and n-element source array. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom">{ <b>default_initial_segments</b> = 1,
-<a class="el" href="a00183.html#x7x5">pointers_per_short_table</a> = 3,
-<b>pointers_per_long_table</b> = sizeof(segment_index_t) * 8
- }</td></tr>
-
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_vector_base_v3::internal_reserve"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (size_type n, size_type element_size, size_type max_size)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_vector_base_v3::internal_capacity"></a>
-size_type </td><td class="memItemRight" valign="bottom"><b>internal_capacity</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow_to_at_least"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_grow_to_at_least</b> (size_type new_size, size_type element_size, <a class="el" href="a00183.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_grow</b> (size_type start, size_type finish, size_type element_size, <a class="el" href="a00183.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow_by"></a>
-size_type </td><td class="memItemRight" valign="bottom"><b>internal_grow_by</b> (size_type delta, size_type element_size, <a class="el" href="a00183.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b7" doxytag="tbb::internal::concurrent_vector_base_v3::internal_push_back"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>internal_push_back</b> (size_type element_size, size_type &index)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8" doxytag="tbb::internal::concurrent_vector_base_v3::internal_clear"></a>
-segment_index_t </td><td class="memItemRight" valign="bottom"><b>internal_clear</b> (<a class="el" href="a00183.html#x2">internal_array_op1</a> destroy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9" doxytag="tbb::internal::concurrent_vector_base_v3::internal_compact"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>internal_compact</b> (size_type element_size, void *table, <a class="el" href="a00183.html#x2">internal_array_op1</a> destroy, <a class="el" href="a00183.html#x3">internal_array_op2</a> copy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b10" doxytag="tbb::internal::concurrent_vector_base_v3::internal_copy"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_copy</b> (const <a class="el" href="a00183.html">concurrent_vector_base_v3</a> &src, size_type element_size, <a class="el" href="a00183.html#x3">internal_array_op2</a> copy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b11" doxytag="tbb::internal::concurrent_vector_base_v3::internal_assign"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_assign</b> (const <a class="el" href="a00183.html">concurrent_vector_base_v3</a> &src, size_type element_size, <a class="el" href="a00183.html#x2">internal_array_op1</a> destroy, <a class="el" href="a00183.html#x3">internal_array_op2</a> assign, <a class="el" href="a00183.html#x3">internal_array_op2</a> copy)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b12" doxytag="tbb::internal::concurrent_vector_base_v3::internal_throw_exception"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_throw_exception</b> (size_type) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b13" doxytag="tbb::internal::concurrent_vector_base_v3::internal_swap"></a>
-void </td><td class="memItemRight" valign="bottom"><b>internal_swap</b> (<a class="el" href="a00183.html">concurrent_vector_base_v3</a> &v)</td></tr>
-
-<tr><td colspan="2"><br><h2>Static Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0" doxytag="tbb::internal::concurrent_vector_base_v3::segment_index_of"></a>
-segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_index_of</b> (size_type index)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f1" doxytag="tbb::internal::concurrent_vector_base_v3::segment_base"></a>
-segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_base</b> (segment_index_t k)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f2" doxytag="tbb::internal::concurrent_vector_base_v3::segment_base_index_of"></a>
-segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_base_index_of</b> (segment_index_t &index)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3" doxytag="tbb::internal::concurrent_vector_base_v3::segment_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><b>segment_size</b> (segment_index_t k)</td></tr>
-
-<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_vector_base_v3::vector_allocator_ptr"></a>
-void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#p0">vector_allocator_ptr</a> )(<a class="el" href="a00183.html">concurrent_vector_base_v3</a> &, size_t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">allocator function pointer <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p1" doxytag="tbb::internal::concurrent_vector_base_v3::my_first_block"></a>
-<a class="el" href="a00165.html">atomic</a>< size_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#p1">my_first_block</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">count of segments in the first block <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p2" doxytag="tbb::internal::concurrent_vector_base_v3::my_early_size"></a>
-<a class="el" href="a00165.html">atomic</a>< size_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#p2">my_early_size</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Requested size of vector. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p3" doxytag="tbb::internal::concurrent_vector_base_v3::my_segment"></a>
-<a class="el" href="a00165.html">atomic</a>< segment_t * > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#p3">my_segment</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the segments table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p4" doxytag="tbb::internal::concurrent_vector_base_v3::my_storage"></a>
-segment_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html#p4">my_storage</a> [pointers_per_short_table]</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">embedded storage of segment pointers <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_vector_base_v3::helper"></a>
-class </td><td class="memItemRight" valign="bottom"><b>helper</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Base class of concurrent vector implementation.
-<p>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="x7" doxytag="tbb::internal::concurrent_vector_base_v3::@0"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">anonymous enum<code> [protected]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-<dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="x7x5" doxytag="pointers_per_short_table"></a>pointers_per_short_table</em> </td><td>
-Number of slots for segment's pointers inside the class. </td></tr>
-</table>
-</dl>
- </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00291.html">concurrent_vector.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00184.html b/doc/html/a00184.html
deleted file mode 100644
index 194fb27..0000000
--- a/doc/html/a00184.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_vector_base_v3::internal_segments_table Struct Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_vector_base_v3::internal_segments_table Struct Reference</h1>Internal structure for compact().
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00291.html">concurrent_vector.h</a>></code>
-<p>
-<a href="a00038.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::concurrent_vector_base_v3::internal_segments_table::first_block"></a>
-segment_index_t </td><td class="memItemRight" valign="bottom"><b>first_block</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::concurrent_vector_base_v3::internal_segments_table::table"></a>
-void * </td><td class="memItemRight" valign="bottom"><b>table</b> [pointers_per_long_table]</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Internal structure for compact().
-<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00291.html">concurrent_vector.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00186.html b/doc/html/a00186.html
deleted file mode 100644
index 6e544f7..0000000
--- a/doc/html/a00186.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::do_iteration_task< Body, Item > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_iteration_task< Body, Item > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
-<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::do_iteration_task< Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00056.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::do_iteration_task::parallel_do_feeder_impl"></a>
-class </td><td class="memItemRight" valign="bottom"><b>parallel_do_feeder_impl</b></td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body, typename Item><br>
- class tbb::internal::do_iteration_task< Body, Item ></h3>
-
-For internal use only.
-<p>
-Executes one iteration of a do.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00187.html b/doc/html/a00187.html
deleted file mode 100644
index ee7cb94..0000000
--- a/doc/html/a00187.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::do_task_iter< Iterator, Body, Item > Class Template Reference</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_task_iter< Iterator, Body, Item > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
-<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::do_task_iter< Iterator, Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00061.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
-<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::do_task_iter::do_task_iter"></a>
- </td><td class="memItemRight" valign="bottom"><b>do_task_iter</b> (Iterator first, Iterator last, <a class="el" href="a00202.html">feeder_type</a> &feeder)</td></tr>
-
-</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Iterator, typename Body, typename Item><br>
- class tbb::internal::do_task_iter< Iterator, Body, Item ></h3>
-
-For internal use only.
-<p>
-Gets block of iterations and packages them into a do_group_task.
-<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
-<hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00188.html b/doc/html/a00188.html
index dddf580..1c6e92f 100644
--- a/doc/html/a00188.html
+++ b/doc/html/a00188.html
@@ -1,28 +1,41 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::empty_task Class Reference</title>
+<title>tbb::affinity_partitioner Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::empty_task Class Reference</h1>task that does nothing. Useful for synchronization.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::affinity_partitioner Class Reference</h1>An affinity partitioner.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00341.html">partitioner.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>.
<p>
-Inheritance diagram for tbb::empty_task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00106.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::affinity_partitioner:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::affinity_partitioner::internal::start_for"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::affinity_partitioner::internal::start_reduce_with_affinity"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce_with_affinity</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::affinity_partitioner::internal::start_scan"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::affinity_partitioner::internal::affinity_partition_type"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::affinity_partition_type</b></td></tr>
+
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-task that does nothing. Useful for synchronization.
+An affinity partitioner.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00341.html">partitioner.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00189.html b/doc/html/a00189.html
index b91cc50..a54ea11 100644
--- a/doc/html/a00189.html
+++ b/doc/html/a00189.html
@@ -1,121 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::filter Class Reference</title>
+<title>tbb::internal::affinity_partitioner_base_v3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::filter Class Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A stage in a pipeline.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::affinity_partitioner_base_v3 Class Reference</h1>Defines entry points into tbb run-time library;.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00300.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00341.html">partitioner.h</a>></code>
<p>
-<a href="a00087.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
+<p>
+Inherited by <a class="el" href="a00188.html">tbb::affinity_partitioner</a><code> [private]</code>.
+<p>
+Inheritance diagram for tbb::internal::affinity_partitioner_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00088.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::filter::is_serial"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#a0">is_serial</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if filter must receive stream in order. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#a1">operator()</a> (void *item)=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Operate on an item from the input stream, and return item for output stream. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#a2">~filter</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy filter. <a href="#a2"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#x2">mode</a> { <b>parallel</b> = internal::CURRENT_VERSION,
-<b>serial</b> = internal::CURRENT_VERSION | internal::IS_SERIAL
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For pipeline version 2 and earlier 0 is parallel and 1 is serial mode. <br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::filter::filter"></a>
- </td><td class="memItemRight" valign="bottom"><b>filter</b> (bool is_serial_)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1" doxytag="tbb::filter::filter"></a>
- </td><td class="memItemRight" valign="bottom"><b>filter</b> (<a class="el" href="a00189.html#x2">mode</a> filter_mode)</td></tr>
-
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::filter::internal::stage_task"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::affinity_partitioner_base_v3::tbb::affinity_partitioner"></a>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#n0">tbb::affinity_partitioner</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::filter::pipeline"></a>
-class </td><td class="memItemRight" valign="bottom"><b>pipeline</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::affinity_partitioner_base_v3::affinity_partition_type"></a>
+class </td><td class="memItemRight" valign="bottom"><b>affinity_partition_type</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-A stage in a pipeline.
+Defines entry points into tbb run-time library;.
<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a2" doxytag="tbb::filter::~filter"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">virtual tbb::filter::~<a class="el" href="a00189.html">filter</a> </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Destroy filter.
-<p>
-If the filter was added to a pipeline, the pipeline must be destroyed first. </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a1" doxytag="tbb::filter::operator()"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">virtual void* tbb::filter::operator() </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">void * </td>
- <td class="mdname1" valign="top" nowrap> <em>item</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [pure virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
+The entry points are the constructor and destructor.
<p>
-Operate on an item from the input stream, and return item for output stream.
-<p>
-Returns NULL if filter is a sink. </td>
- </tr>
-</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00300.html">pipeline.h</a></ul>
+<li><a class="el" href="a00341.html">partitioner.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00190.html b/doc/html/a00190.html
index 0a09e7b..eb1fdd9 100644
--- a/doc/html/a00190.html
+++ b/doc/html/a00190.html
@@ -1,33 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::final_scan_tag Struct Reference</title>
+<title>tbb::aligned_space< T, N > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::final_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Used to indicate that the final scan is being performed.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::aligned_space< T, N > Class Template Reference</h1>Block of space aligned sufficiently to construct an array T with N elements.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00323.html">aligned_space.h</a>></code>
<p>
-<a href="a00068.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00001.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::final_scan_tag::is_final_scan"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::aligned_space::begin"></a>
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#a0">begin</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to beginning of array. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::aligned_space::end"></a>
+T * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#a1">end</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to one past last element in array. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the final scan is being performed.
+<h3>template<typename T, size_t N><br>
+ class tbb::aligned_space< T, N ></h3>
+
+Block of space aligned sufficiently to construct an array T with N elements.
+<p>
+The elements are not constructed or destroyed by this class.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00323.html">aligned_space.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00191.html b/doc/html/a00191.html
index f19bd9e..8e00611 100644
--- a/doc/html/a00191.html
+++ b/doc/html/a00191.html
@@ -1,45 +1,31 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::final_sum< Range, Body > Class Template Reference</title>
+<title>tbb::atomic< T > Struct Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::final_sum< Range, Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Performs final scan for a leaf.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::atomic< T > Struct Template Reference</h1>Primary template for atomic.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00324.html">atomic.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::final_sum< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00069.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::final_sum::final_sum"></a>
- </td><td class="memItemRight" valign="bottom"><b>final_sum</b> (Body &body_)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::final_sum::finish_construction"></a>
-void </td><td class="memItemRight" valign="bottom"><b>finish_construction</b> (const Range &range_, Body *stuff_last_)</td></tr>
-
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::final_sum::body"></a>
-Body </td><td class="memItemRight" valign="bottom"><b>body</b></td></tr>
-
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body><br>
- class tbb::internal::final_sum< Range, Body ></h3>
+<h3>template<typename T><br>
+ struct tbb::atomic< T ></h3>
-Performs final scan for a leaf.
+Primary template for atomic.
+<p>
+See the Reference for details.
<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00324.html">atomic.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00192.html b/doc/html/a00192.html
index 768e8f3..57fb161 100644
--- a/doc/html/a00192.html
+++ b/doc/html/a00192.html
@@ -1,38 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::finish_reduce< Body > Class Template Reference</title>
+<title>tbb::internal::AtomicBackoff Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_reduce< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type use to combine the partial results of parallel_reduce.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::AtomicBackoff Class Reference</h1>Class that implements exponential backoff.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00354.html">tbb_machine.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::finish_reduce< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00063.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00135.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::finish_reduce::start_reduce"></a>
-class </td><td class="memItemRight" valign="bottom"><b>start_reduce</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::AtomicBackoff::pause"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#a1">pause</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pause for a while. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::AtomicBackoff::bounded_pause"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>bounded_pause</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::AtomicBackoff::reset"></a>
+void </td><td class="memItemRight" valign="bottom"><b>reset</b> ()</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body><br>
- class tbb::internal::finish_reduce< Body ></h3>
-
-Task type use to combine the partial results of parallel_reduce.
+Class that implements exponential backoff.
+<p>
+See implementation of SpinwaitWhileEq for an example.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00354.html">tbb_machine.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00193.html b/doc/html/a00193.html
index e8d4071..e0f5a6f 100644
--- a/doc/html/a00193.html
+++ b/doc/html/a00193.html
@@ -1,38 +1,41 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::finish_reduce_with_affinity< Body > Class Template Reference</title>
+<title>tbb::auto_partitioner Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_reduce_with_affinity< Body > Class Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::auto_partitioner Class Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>An auto partitioner.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00341.html">partitioner.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::finish_reduce_with_affinity< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::finish_reduce_with_affinity::start_reduce_with_affinity"></a>
-class </td><td class="memItemRight" valign="bottom"><b>start_reduce_with_affinity</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::auto_partitioner::internal::start_for"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::auto_partitioner::internal::start_reduce"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::auto_partitioner::internal::start_scan"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body><br>
- class tbb::internal::finish_reduce_with_affinity< Body ></h3>
-
-Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+An auto partitioner.
+<p>
+The range is initial divided into several large chunks. Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00341.html">partitioner.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00194.html b/doc/html/a00194.html
index e43fa10..f1241e9 100644
--- a/doc/html/a00194.html
+++ b/doc/html/a00194.html
@@ -1,49 +1,30 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::finish_scan< Range, Body > Class Template Reference</title>
+<title>tbb::bad_last_alloc Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::finish_scan< Range, Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Combine partial results.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::bad_last_alloc Class Reference</h1>Exception for concurrent containers.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00353.html">tbb_exception.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::finish_scan< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00071.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00131.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::finish_scan::execute"></a>
-<a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#a0">execute</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::finish_scan::finish_scan"></a>
- </td><td class="memItemRight" valign="bottom"><b>finish_scan</b> (<a class="el" href="a00227.html">sum_node_type</a> *&return_slot_, <a class="el" href="a00191.html">final_sum_type</a> **sum_, <a class="el" href="a00227.html">sum_node_type</a> &result_)</td></tr>
-
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::finish_scan::right_zombie"></a>
-<a class="el" href="a00191.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>right_zombie</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::finish_scan::result"></a>
-<a class="el" href="a00227.html">sum_node_type</a> & </td><td class="memItemRight" valign="bottom"><b>result</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::bad_last_alloc::what"></a>
+virtual const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const throw ()</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body><br>
- class tbb::internal::finish_scan< Range, Body ></h3>
-
-Combine partial results.
+Exception for concurrent containers.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00353.html">tbb_exception.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00195.html b/doc/html/a00195.html
index b4e353f..54f1e0e 100644
--- a/doc/html/a00195.html
+++ b/doc/html/a00195.html
@@ -1,55 +1,254 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::hash_map_base Class Reference</title>
+<title>tbb::blocked_range< Value > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_base Class Reference</h1>base class of <a class="el" href="a00174.html">concurrent_hash_map</a>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range< Value > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A range over which to iterate.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00325.html">blocked_range.h</a>></code>
<p>
-Inherited by <a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><code> [protected]</code>.
-<p>
-Inheritance diagram for tbb::internal::hash_map_base:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00020.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00015.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::hash_map_base::node_mutex_t"></a>
-typedef <a class="el" href="a00219.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>node_mutex_t</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef Value </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#w0">const_iterator</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a value. <a href="#w0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range::size_type"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#w1">size_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a0">blocked_range</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct range with default-constructed values for begin and end. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range::blocked_range"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a1">blocked_range</a> (Value begin_, Value end_, <a class="el" href="a00195.html#w1">size_type</a> grainsize_=1)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct range over half-open interval [begin,end), with the given grainsize. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range::begin"></a>
+<a class="el" href="a00195.html#w0">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a2">begin</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::hash_map_base::chain_mutex_t"></a>
-typedef <a class="el" href="a00219.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>chain_mutex_t</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Beginning of range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range::end"></a>
+<a class="el" href="a00195.html#w0">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a3">end</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::hash_map_base::segment_mutex_t"></a>
-typedef <a class="el" href="a00219.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>segment_mutex_t</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">One past last value in range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00195.html#w1">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a4">size</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::hash_map_base::hashcode_t"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#w3">hashcode_t</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of the range. <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range::grainsize"></a>
+<a class="el" href="a00195.html#w1">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a5">grainsize</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a hash code. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::internal::hash_map_base::n_segment_bits"></a>
-const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#s0">n_segment_bits</a> = 6</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a6">empty</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Log2 of n_segment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::internal::hash_map_base::n_segment"></a>
-const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#s1">n_segment</a> = size_t(1)<<<a class="el" href="a00195.html#s0">n_segment_bits</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a7">is_divisible</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of segments. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::internal::hash_map_base::max_physical_size"></a>
-const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#s2">max_physical_size</a> = size_t(1)<<(8*sizeof(<a class="el" href="a00195.html#w3">hashcode_t</a>)-<a class="el" href="a00195.html#s0">n_segment_bits</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible. <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#a8">blocked_range</a> (<a class="el" href="a00195.html">blocked_range</a> &r, <a class="el" href="a00254.html">split</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range. <a href="#a8"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::blocked_range::blocked_range2d"></a>
+class </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::blocked_range::blocked_range3d"></a>
+class </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size of array of chains. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-base class of <a class="el" href="a00174.html">concurrent_hash_map</a>
+<h3>template<typename Value><br>
+ class tbb::blocked_range< Value ></h3>
+
+A range over which to iterate.
+<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="w0" doxytag="tbb::blocked_range::const_iterator"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">typedef Value <a class="el" href="a00195.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00195.html#w0">const_iterator</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Type of a value.
+<p>
+Called a const_iterator for sake of algorithms that need to treat a <a class="el" href="a00195.html">blocked_range</a> as an STL container. </td>
+ </tr>
+</table>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="tbb::blocked_range::blocked_range"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00195.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00195.html">blocked_range</a> </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Construct range with default-constructed values for begin and end.
<p>
+Requires that Value have a default constructor. </td>
+ </tr>
+</table>
+<a class="anchor" name="a8" doxytag="tbb::blocked_range::blocked_range"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00195.html">tbb::blocked_range</a>< Value >::<a class="el" href="a00195.html">blocked_range</a> </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00195.html">blocked_range</a>< Value > & </td>
+ <td class="mdname" nowrap> <em>r</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap><a class="el" href="a00254.html">split</a> </td>
+ <td class="mdname" nowrap></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Split range.
+<p>
+The new Range *this has the second half, the old range r has the first half. Unspecified if <a class="el" href="a00195.html#a3">end()</a><<a class="el" href="a00195.html#a2">begin()</a> or !is_divisible(). </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a7" doxytag="tbb::blocked_range::is_divisible"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00195.html">tbb::blocked_range</a>< Value >::is_divisible </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+True if range is divisible.
+<p>
+Unspecified if <a class="el" href="a00195.html#a3">end()</a><<a class="el" href="a00195.html#a2">begin()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a4" doxytag="tbb::blocked_range::size"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00195.html#w1">size_type</a> <a class="el" href="a00195.html">tbb::blocked_range</a>< Value >::size </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Size of the range.
+<p>
+Unspecified if <a class="el" href="a00195.html#a3">end()</a><<a class="el" href="a00195.html#a2">begin()</a>. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00325.html">blocked_range.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00196.html b/doc/html/a00196.html
index 262e95a..e943fa2 100644
--- a/doc/html/a00196.html
+++ b/doc/html/a00196.html
@@ -1,93 +1,66 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::hash_map_iterator< Container, Value > Class Template Reference</title>
+<title>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL */.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range2d< RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A 2-dimensional range that models the Range concept.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00326.html">blocked_range2d.h</a>></code>
<p>
-<a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00016.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::hash_map_iterator::difference_type"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::blocked_range2d::row_range_type"></a>
+typedef <a class="el" href="a00195.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#w0">row_range_type</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::hash_map_iterator::value_type"></a>
-typedef Value </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::hash_map_iterator::pointer"></a>
-typedef Value * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::hash_map_iterator::reference"></a>
-typedef Value & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::internal::hash_map_iterator::const_reference"></a>
-typedef const Value & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::internal::hash_map_iterator::iterator_category"></a>
-typedef std::forward_iterator_tag </td><td class="memItemRight" valign="bottom"><b>iterator_category</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range2d::col_range_type"></a>
+typedef <a class="el" href="a00195.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::hash_map_iterator::hash_map_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a0">hash_map_iterator</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct undefined iterator. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::hash_map_iterator::hash_map_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><b>hash_map_iterator</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, typename <a class="el" href="a00195.html#w1">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00195.html#w1">col_range_type::size_type</a> col_grainsize)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::hash_map_iterator::operator *"></a>
-Value & </td><td class="memItemRight" valign="bottom"><b>operator *</b> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::hash_map_iterator::operator->"></a>
-Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range2d::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a2">empty</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::hash_map_iterator::operator++"></a>
-<a class="el" href="a00196.html">hash_map_iterator</a> & </td><td class="memItemRight" valign="bottom"><b>operator++</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range2d::is_divisible"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a3">is_divisible</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::hash_map_iterator::operator++"></a>
-Value * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a5">operator++</a> (int)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::blocked_range2d::blocked_range2d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range2d</b> (<a class="el" href="a00196.html">blocked_range2d</a> &r, <a class="el" href="a00254.html">split</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::hash_map_iterator::internal::hash_map_iterator"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range2d::rows"></a>
+const <a class="el" href="a00195.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a5">rows</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::hash_map_iterator::internal::hash_map_range"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::hash_map_iterator::tbb::concurrent_hash_map"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#n2">tbb::concurrent_hash_map</a></td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n3" doxytag="tbb::internal::hash_map_iterator::operator=="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n4" doxytag="tbb::internal::hash_map_iterator::operator!="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n5" doxytag="tbb::internal::hash_map_iterator::operator-"></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range2d::cols"></a>
+const <a class="el" href="a00195.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#a6">cols</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Container, typename Value><br>
- class tbb::internal::hash_map_iterator< Container, Value ></h3>
+<h3>template<typename RowValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range2d< RowValue, ColValue ></h3>
-Meets requirements of a forward iterator for STL */.
-<p>
-Value is either the T or const T type of the container.
+A 2-dimensional range that models the Range concept.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00326.html">blocked_range2d.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00197.html b/doc/html/a00197.html
index d4c4929..d906eed 100644
--- a/doc/html/a00197.html
+++ b/doc/html/a00197.html
@@ -1,85 +1,73 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::hash_map_range< Iterator > Class Template Reference</title>
+<title>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::hash_map_range< Iterator > Class Template Reference</h1>Range class used with <a class="el" href="a00174.html">concurrent_hash_map</a>.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::blocked_range3d< PageValue, RowValue, ColValue > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A 3-dimensional range that models the Range concept.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00289.html">concurrent_hash_map.h</a>></code>
+<code>#include <<a class="el" href="a00327.html">blocked_range3d.h</a>></code>
<p>
-<a href="a00023.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00017.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::hash_map_range::size_type"></a>
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#w0">size_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::blocked_range3d::page_range_type"></a>
+typedef <a class="el" href="a00195.html">blocked_range</a>< PageValue > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#w0">page_range_type</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::hash_map_range::value_type"></a>
-typedef Iterator::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of an iteation range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::blocked_range3d::row_range_type"></a>
+typedef <a class="el" href="a00195.html">blocked_range</a>< RowValue > </td><td class="memItemRight" valign="bottom"><b>row_range_type</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::hash_map_range::reference"></a>
-typedef Iterator::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::hash_map_range::const_reference"></a>
-typedef Iterator::const_reference </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::internal::hash_map_range::difference_type"></a>
-typedef Iterator::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::internal::hash_map_range::iterator"></a>
-typedef Iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::blocked_range3d::col_range_type"></a>
+typedef <a class="el" href="a00195.html">blocked_range</a>< ColValue > </td><td class="memItemRight" valign="bottom"><b>col_range_type</b></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::hash_map_range::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a0">empty</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, RowValue row_begin, RowValue row_end, ColValue col_begin, ColValue col_end)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::hash_map_range::is_divisible"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a1">is_divisible</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range can be partitioned into two subranges. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a2">hash_map_range</a> (<a class="el" href="a00197.html">hash_map_range</a> &r, <a class="el" href="a00221.html">split</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (PageValue page_begin, PageValue page_end, typename <a class="el" href="a00195.html#w1">page_range_type::size_type</a> page_grainsize, RowValue row_begin, RowValue row_end, typename <a class="el" href="a00195.html#w1">row_range_type::size_type</a> row_grainsize, ColValue col_begin, ColValue col_end, typename <a class="el" href="a00195.html#w1">col_range_type::size_type</a> col_grainsize)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a3" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
-template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00197.html#a3">hash_map_range</a> (<a class="el" href="a00197.html">hash_map_range</a>< U > &r)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::blocked_range3d::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a2">empty</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">type conversion <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a4">hash_map_range</a> (const Iterator &begin_, const Iterator &end_, <a class="el" href="a00197.html#w0">size_type</a> grainsize=1)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::blocked_range3d::is_divisible"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a3">is_divisible</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Init range with iterators and grainsize specified. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::hash_map_range::begin"></a>
-const Iterator & </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is divisible into two pieces. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::blocked_range3d::blocked_range3d"></a>
+ </td><td class="memItemRight" valign="bottom"><b>blocked_range3d</b> (<a class="el" href="a00197.html">blocked_range3d</a> &r, <a class="el" href="a00254.html">split</a>)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::hash_map_range::end"></a>
-const Iterator & </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::blocked_range3d::pages"></a>
+const <a class="el" href="a00195.html">page_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a5">pages</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::hash_map_range::grainsize"></a>
-<a class="el" href="a00197.html#w0">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a7">grainsize</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The pages of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::blocked_range3d::rows"></a>
+const <a class="el" href="a00195.html">row_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a6">rows</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
-class </td><td class="memItemRight" valign="bottom"><b>hash_map_range</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The rows of the iteration space. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::blocked_range3d::cols"></a>
+const <a class="el" href="a00195.html">col_range_type</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#a7">cols</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The columns of the iteration space. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Iterator><br>
- class tbb::internal::hash_map_range< Iterator ></h3>
+<h3>template<typename PageValue, typename RowValue = PageValue, typename ColValue = RowValue><br>
+ class tbb::blocked_range3d< PageValue, RowValue, ColValue ></h3>
-Range class used with <a class="el" href="a00174.html">concurrent_hash_map</a>.
+A 3-dimensional range that models the Range concept.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00289.html">concurrent_hash_map.h</a></ul>
+<li><a class="el" href="a00327.html">blocked_range3d.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00198.html b/doc/html/a00198.html
index 1e0caf2..56bc9f1 100644
--- a/doc/html/a00198.html
+++ b/doc/html/a00198.html
@@ -1,47 +1,87 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::mutex Class Reference</title>
+<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::mutex Class Reference</h1>Wrapper around the platform's native reader-writer lock.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::cache_aligned_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00292.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00328.html">cache_aligned_allocator.h</a>></code>
<p>
-<a href="a00044.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00018.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::cache_aligned_allocator::pointer"></a>
+typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::cache_aligned_allocator::const_pointer"></a>
+typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::cache_aligned_allocator::reference"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::cache_aligned_allocator::const_reference"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::cache_aligned_allocator::value_type"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::cache_aligned_allocator::size_type"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::cache_aligned_allocator::difference_type"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::mutex::mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a0">mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::cache_aligned_allocator::cache_aligned_allocator"></a>
+ </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00198.html">cache_aligned_allocator</a> &) throw ()</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::cache_aligned_allocator::cache_aligned_allocator"></a>
+template<typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00198.html">cache_aligned_allocator</a>< U > &) throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::cache_aligned_allocator::address"></a>
+pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::mutex::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::cache_aligned_allocator::address"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::mutex::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::cache_aligned_allocator::allocate"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a5">allocate</a> (size_type n, const void *hint=0)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::mutex::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::cache_aligned_allocator::deallocate"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::mutex::scoped_lock"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::cache_aligned_allocator::max_size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a7">max_size</a> () const throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::cache_aligned_allocator::construct"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a8">construct</a> (pointer p, const T &value)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::cache_aligned_allocator::destroy"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#a9">destroy</a> (pointer p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Wrapper around the platform's native reader-writer lock.
+<h3>template<typename T><br>
+ class tbb::cache_aligned_allocator< T ></h3>
+
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<p>
-For testing purposes only.
+The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00292.html">mutex.h</a></ul>
+<li><a class="el" href="a00328.html">cache_aligned_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00199.html b/doc/html/a00199.html
index f340a30..b25976d 100644
--- a/doc/html/a00199.html
+++ b/doc/html/a00199.html
@@ -1,85 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::mutex::scoped_lock Class Reference</title>
+<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::cache_aligned_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00292.html">mutex.h</a>></code>
+<code>#include <<a class="el" href="a00328.html">cache_aligned_allocator.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
-<p>
-Inheritance diagram for tbb::mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00045.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00020.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a0">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a1">scoped_lock</a> (<a class="el" href="a00198.html">mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a2">~scoped_lock</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::cache_aligned_allocator< void >::pointer"></a>
+typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a3">acquire</a> (<a class="el" href="a00198.html">mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::cache_aligned_allocator< void >::const_pointer"></a>
+typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a4">try_acquire</a> (<a class="el" href="a00198.html">mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::cache_aligned_allocator< void >::value_type"></a>
+typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a5">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern.
-<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a1" doxytag="tbb::mutex::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::mutex::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00198.html">mutex</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>mutex</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<h3>template<><br>
+ class tbb::cache_aligned_allocator< void ></h3>
+Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<p>
-Acquire lock on given mutex.
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. </td>
- </tr>
-</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00292.html">mutex.h</a></ul>
+<li><a class="el" href="a00328.html">cache_aligned_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00200.html b/doc/html/a00200.html
index b0c2129..36a2266 100644
--- a/doc/html/a00200.html
+++ b/doc/html/a00200.html
@@ -1,33 +1,152 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::no_copy Class Reference</title>
+<title>tbb::captured_exception Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::no_copy Class Reference</h1>Base class for types that should not be copied or assigned.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::captured_exception Class Reference</h1>This class is used by TBB to propagate information about unhandled exceptions into the root thread.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00313.html">tbb_stddef.h</a>></code>
+<code>#include <<a class="el" href="a00353.html">tbb_exception.h</a>></code>
<p>
-Inherited by tbb::internal::affinity_partition_type, <a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a><code> [private]</code>, <a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a><code> [private]</code>, <a class="el" href="a00199.html">tbb::mutex::scoped_lock</a><code> [private]</code>, <a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a><code> [private]</code>, <a class="el" href="a00204.html">tbb::parallel_wh [...]
+Inherits <a class="el" href="a00268.html">tbb::tbb_exception</a>.
<p>
-Inheritance diagram for tbb::internal::no_copy:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00122.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::captured_exception:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00133.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::no_copy::no_copy"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a0">no_copy</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::captured_exception::captured_exception"></a>
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const <a class="el" href="a00200.html">captured_exception</a> &src)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allow default construction. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::captured_exception::captured_exception"></a>
+ </td><td class="memItemRight" valign="bottom"><b>captured_exception</b> (const char *name, const char *info)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::captured_exception::operator="></a>
+<a class="el" href="a00200.html">captured_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00200.html">captured_exception</a> &src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00200.html">captured_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a4">move</a> () throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object. <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a5">destroy</a> () throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00200.html#a4">move()</a> method. <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a6">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object. <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::captured_exception::name"></a>
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a7">name</a> () const throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::captured_exception::what"></a>
+const char *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#a8">what</a> () const throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00200.html#a8">what()</a> method. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Base class for types that should not be copied or assigned.
+This class is used by TBB to propagate information about unhandled exceptions into the root thread.
+<p>
+Exception of this type is thrown by TBB in the root thread (thread that started a parallel algorithm ) if an unhandled exception was intercepted during the algorithm execution in one of the workers. <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00268.html">tbb::tbb_exception</a> * </dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a5" doxytag="tbb::captured_exception::destroy"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void tbb::captured_exception::destroy </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Destroys objects created by the <a class="el" href="a00200.html#a4">move()</a> method.
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. *
<p>
+Implements <a class="el" href="a00268.html#a1">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a4" doxytag="tbb::captured_exception::move"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00200.html">captured_exception</a>* tbb::captured_exception::move </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Creates and returns pointer to the deep copy of this exception object.
+<p>
+Move semantics is allowed. *
+<p>
+Implements <a class="el" href="a00268.html#a0">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a6" doxytag="tbb::captured_exception::throw_self"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void tbb::captured_exception::throw_self </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Throws this exception object.
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. *
+<p>
+Implements <a class="el" href="a00268.html#a2">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00313.html">tbb_stddef.h</a></ul>
+<li><a class="el" href="a00353.html">tbb_exception.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00201.html b/doc/html/a00201.html
index 252c373..25f4e86 100644
--- a/doc/html/a00201.html
+++ b/doc/html/a00201.html
@@ -1,49 +1,646 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::parallel_do_feeder< Item > Class Template Reference</title>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::parallel_do_feeder< Item > Class Template Reference</h1>Class the user supplied algorithm body uses to add new tasks
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A > Class Template Reference</h1>Unordered map from Key to T.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00222.html">tbb::internal::hash_map_base</a>.
<p>
-Inherited by <a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>.
-<p>
-Inheritance diagram for tbb::parallel_do_feeder< Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00054.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00027.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::key_type"></a>
+typedef Key </td><td class="memItemRight" valign="bottom"><b>key_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_hash_map::mapped_type"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>mapped_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_hash_map::value_type"></a>
+typedef std::pair< const Key,<br>
+ T > </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_hash_map::size_type"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::concurrent_hash_map::difference_type"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_hash_map::pointer"></a>
+typedef value_type * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_hash_map::const_pointer"></a>
+typedef const value_type * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_hash_map::reference"></a>
+typedef value_type & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w8" doxytag="tbb::concurrent_hash_map::const_reference"></a>
+typedef const value_type & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w9" doxytag="tbb::concurrent_hash_map::iterator"></a>
+typedef <a class="el" href="a00223.html">internal::hash_map_iterator</a><<br>
+ <a class="el" href="a00201.html">concurrent_hash_map</a>, value_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w10" doxytag="tbb::concurrent_hash_map::const_iterator"></a>
+typedef <a class="el" href="a00223.html">internal::hash_map_iterator</a><<br>
+ <a class="el" href="a00201.html">concurrent_hash_map</a>, const <br>
+value_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w11" doxytag="tbb::concurrent_hash_map::range_type"></a>
+typedef <a class="el" href="a00224.html">internal::hash_map_range</a><<br>
+ <a class="el" href="a00223.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w12" doxytag="tbb::concurrent_hash_map::const_range_type"></a>
+typedef <a class="el" href="a00224.html">internal::hash_map_range</a><<br>
+ <a class="el" href="a00223.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w13" doxytag="tbb::concurrent_hash_map::allocator_type"></a>
+typedef A </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::parallel_do_feeder::add"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a0">add</a> (const Item &item)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a0">concurrent_hash_map</a> (const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a1">concurrent_hash_map</a> (const <a class="el" href="a00201.html">concurrent_hash_map</a> &table, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::concurrent_hash_map::concurrent_hash_map"></a>
+template<typename I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00201.html#a2">concurrent_hash_map</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_hash_map::operator="></a>
+<a class="el" href="a00201.html">concurrent_hash_map</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a3">operator=</a> (const <a class="el" href="a00201.html">concurrent_hash_map</a> &table)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_hash_map::clear"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a4">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::concurrent_hash_map::~concurrent_hash_map"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a5">~concurrent_hash_map</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear table and destroy it. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::concurrent_hash_map::range"></a>
+<a class="el" href="a00224.html">range_type</a> </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::concurrent_hash_map::range"></a>
+<a class="el" href="a00224.html">const_range_type</a> </td><td class="memItemRight" valign="bottom"><b>range</b> (size_type grainsize=1) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::concurrent_hash_map::begin"></a>
+<a class="el" href="a00223.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::concurrent_hash_map::end"></a>
+<a class="el" href="a00223.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_hash_map::begin"></a>
+<a class="el" href="a00223.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_hash_map::end"></a>
+<a class="el" href="a00223.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::concurrent_hash_map::equal_range"></a>
+std::pair< <a class="el" href="a00223.html">iterator</a>, <a class="el" href="a00223.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_hash_map::equal_range"></a>
+std::pair< <a class="el" href="a00223.html">const_iterator</a>,<br>
+ <a class="el" href="a00223.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>equal_range</b> (const Key &key) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a14">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of items in table. <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_hash_map::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a15">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if <a class="el" href="a00201.html#a14">size()</a>==0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::concurrent_hash_map::max_size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a16">max_size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on size. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::concurrent_hash_map::get_allocator"></a>
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a17">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a18" doxytag="tbb::concurrent_hash_map::swap"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a18">swap</a> (<a class="el" href="a00201.html">concurrent_hash_map</a> &table)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::concurrent_hash_map::count"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a19">count</a> (const Key &key) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return count of items (0 or 1). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a20">find</a> (<a class="el" href="a00203.html">const_accessor</a> &result, const Key &key) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a read lock on the item. <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a21">find</a> (<a class="el" href="a00202.html">accessor</a> &result, const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Find item and acquire a write lock on the item. <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a22">insert</a> (<a class="el" href="a00203.html">const_accessor</a> &result, const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a read lock on the item. <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a23">insert</a> (<a class="el" href="a00202.html">accessor</a> &result, const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item (if not already present) and acquire a write lock on the item. <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a24">insert</a> (<a class="el" href="a00203.html">const_accessor</a> &result, const value_type &value)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a read lock on the item. <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a25">insert</a> (<a class="el" href="a00202.html">accessor</a> &result, const value_type &value)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already and acquire a write lock on the item. <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a26">insert</a> (const value_type &value)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert item by copying if there is no such key present already. <a href="#a26"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a27" doxytag="tbb::concurrent_hash_map::insert"></a>
+template<typename I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00201.html#a27">insert</a> (I first, I last)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Insert range [first, last). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a28">erase</a> (const Key &key)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item. <a href="#a28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a29">erase</a> (<a class="el" href="a00203.html">const_accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by <a class="el" href="a00203.html">const_accessor</a>. <a href="#a29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#a30">erase</a> (<a class="el" href="a00202.html">accessor</a> &item_accessor)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase item by accessor. <a href="#a30"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_hash_map::internal::hash_map_iterator"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::concurrent_hash_map::internal::hash_map_range"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::concurrent_hash_map::node"></a>
+struct </td><td class="memItemRight" valign="bottom"><b>node</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::concurrent_hash_map::const_accessor"></a>
+class </td><td class="memItemRight" valign="bottom"><b>const_accessor</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::concurrent_hash_map::chain"></a>
+struct </td><td class="memItemRight" valign="bottom"><b>chain</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::concurrent_hash_map::segment"></a>
+struct </td><td class="memItemRight" valign="bottom"><b>segment</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Item><br>
- class tbb::parallel_do_feeder< Item ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, A ></h3>
-Class the user supplied algorithm body uses to add new tasks
+Unordered map from Key to T.
<p>
-<dl compact><dt><b>Parameters:</b></dt><dd>
- <table border="0" cellspacing="2" cellpadding="0">
- <tr><td valign="top"></td><td valign="top"><em>Item</em> </td><td>Work item type * </td></tr>
- </table>
-</dl>
+<a class="el" href="a00201.html">concurrent_hash_map</a> is associative container with concurrent access.<p>
+<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1).</dd></dl>
+<dl compact><dt><b>Exception Safety</b></dt><dd><ul>
+<li>Hash function is not permitted to throw an exception. User-defined types Key and T are forbidden from throwing an exception in destructors.</li><li>If exception happens during <a class="el" href="a00201.html#a22">insert()</a> operations, it has no effect (unless exception raised by HashCompare::hash() function during grow_segment).</li><li>If exception happens during <a class="el" href="a00201.html#a3">operator=()</a> operation, the container can have a part of source items, and meth [...]
+</dd></dl>
+<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
+<li>Fixed exception-safety</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Added constructor from a range of iterators</li><li>Added several new overloaded <a class="el" href="a00201.html#a22">insert()</a> methods</li><li>Added <a class="el" href="a00201.html#a17">get_allocator()</a></li><li>Added <a class="el" href="a00201.html#a18">swap()</a></li><li>Added <a class="el" href="a00201.html#a19">count()</a></li><li>Added overloaded <a [...]
+</dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a30" doxytag="tbb::concurrent_hash_map::erase"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00202.html">accessor</a> & </td>
+ <td class="mdname1" valign="top" nowrap> <em>item_accessor</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
<p>
+Erase item by accessor.
+<p>
+Return true if item was erased by particularly this call. </td>
+ </tr>
+</table>
+<a class="anchor" name="a29" doxytag="tbb::concurrent_hash_map::erase"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00203.html">const_accessor</a> & </td>
+ <td class="mdname1" valign="top" nowrap> <em>item_accessor</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Erase item by <a class="el" href="a00203.html">const_accessor</a>.
+<p>
+Return true if item was erased by particularly this call. </td>
+ </tr>
+</table>
+<a class="anchor" name="a28" doxytag="tbb::concurrent_hash_map::erase"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::erase </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const Key & </td>
+ <td class="mdname1" valign="top" nowrap> <em>key</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Erase item.
+<p>
+Return true if item was erased by particularly this call. </td>
+ </tr>
+</table>
+<a class="anchor" name="a21" doxytag="tbb::concurrent_hash_map::find"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00202.html">accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const Key & </td>
+ <td class="mdname" nowrap> <em>key</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Find item and acquire a write lock on the item.
+<p>
+Return true if item is found, false otherwise. </td>
+ </tr>
+</table>
+<a class="anchor" name="a20" doxytag="tbb::concurrent_hash_map::find"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::find </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00203.html">const_accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const Key & </td>
+ <td class="mdname" nowrap> <em>key</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"> const<code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Find item and acquire a read lock on the item.
+<p>
+Return true if item is found, false otherwise. </td>
+ </tr>
+</table>
+<a class="anchor" name="a26" doxytag="tbb::concurrent_hash_map::insert"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const value_type & </td>
+ <td class="mdname1" valign="top" nowrap> <em>value</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Insert item by copying if there is no such key present already.
+<p>
+Returns true if item is inserted. </td>
+ </tr>
+</table>
+<a class="anchor" name="a25" doxytag="tbb::concurrent_hash_map::insert"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00202.html">accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const value_type & </td>
+ <td class="mdname" nowrap> <em>value</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Insert item by copying if there is no such key present already and acquire a write lock on the item.
+<p>
+Returns true if item is new. </td>
+ </tr>
+</table>
+<a class="anchor" name="a24" doxytag="tbb::concurrent_hash_map::insert"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00203.html">const_accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const value_type & </td>
+ <td class="mdname" nowrap> <em>value</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Insert item by copying if there is no such key present already and acquire a read lock on the item.
+<p>
+Returns true if item is new. </td>
+ </tr>
+</table>
+<a class="anchor" name="a23" doxytag="tbb::concurrent_hash_map::insert"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00202.html">accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const Key & </td>
+ <td class="mdname" nowrap> <em>key</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Insert item (if not already present) and acquire a write lock on the item.
+<p>
+Returns true if item is new. </td>
+ </tr>
+</table>
+<a class="anchor" name="a22" doxytag="tbb::concurrent_hash_map::insert"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::insert </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00203.html">const_accessor</a> & </td>
+ <td class="mdname" nowrap> <em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const Key & </td>
+ <td class="mdname" nowrap> <em>key</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Insert item (if not already present) and acquire a read lock on the item.
+<p>
+Returns true if item is new. </td>
+ </tr>
+</table>
+<a class="anchor" name="a14" doxytag="tbb::concurrent_hash_map::size"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Key, typename T, typename HashCompare, typename A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A >::size_type <a class="el" href="a00201.html">tbb::concurrent_hash_map</a>< Key, T, HashCompare, A >::size </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> const</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Number of items in table.
+<p>
+Be aware that this method is relatively slow compared to the typical <a class="el" href="a00201.html#a14">size()</a> method for an STL container. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00202.html b/doc/html/a00202.html
index fdc88ed..8be2b65 100644
--- a/doc/html/a00202.html
+++ b/doc/html/a00202.html
@@ -1,43 +1,46 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::parallel_do_feeder_impl< Body, Item > Class Template Reference</title>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::parallel_do_feeder_impl< Body, Item > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor Class Reference</h1>Allows write access to elements and combines data access, locking, and garbage collection.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-Inherits <a class="el" href="a00201.html">tbb::parallel_do_feeder< Item >< Item ></a>.
+Inherits <a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>.
<p>
-Inheritance diagram for tbb::internal::parallel_do_feeder_impl< Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00058.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00029.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::parallel_do_feeder_impl::my_body"></a>
-const Body * </td><td class="memItemRight" valign="bottom"><b>my_body</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::accessor::value_type"></a>
+typedef std::pair< const Key,<br>
+ T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#w0">value_type</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::parallel_do_feeder_impl::my_barrier"></a>
-<a class="el" href="a00188.html">empty_task</a> * </td><td class="memItemRight" valign="bottom"><b>my_barrier</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::accessor::operator *"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#a0">operator *</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::accessor::operator->"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#a1">operator-></a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<class Body, typename Item><br>
- class tbb::internal::parallel_do_feeder_impl< Body, Item ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</h3>
-For internal use only.
-<p>
-Implements new task adding procedure.
+Allows write access to elements and combines data access, locking, and garbage collection.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00203.html b/doc/html/a00203.html
index a3d983a..d688798 100644
--- a/doc/html/a00203.html
+++ b/doc/html/a00203.html
@@ -1,39 +1,69 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::parallel_do_operator_selector< Body, Item > Class Template Reference</title>
+<title>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::parallel_do_operator_selector< Body, Item > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor Class Reference</h1>Combines data access, locking, and garbage collection.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-<a href="a00055.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by <a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>.
+<p>
+Inheritance diagram for tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00028.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="e0" doxytag="tbb::internal::parallel_do_operator_selector::call"></a>
-template<typename A1, typename A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>call</b> (const Body &obj, A1 &arg1, A2 &arg2)</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_hash_map::const_accessor::value_type"></a>
+typedef const std::pair< const <br>
+Key, T > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#w0">value_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of value. <br></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_hash_map::const_accessor::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a0">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if result is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_hash_map::const_accessor::release"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a1">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set to null. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::concurrent_hash_map::const_accessor::operator *"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a2">operator *</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return reference to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_hash_map::const_accessor::operator->"></a>
+const_pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a3">operator-></a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return pointer to associated value in hash table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_hash_map::const_accessor::const_accessor"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a4">const_accessor</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Create empty result. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::concurrent_hash_map::const_accessor::~const_accessor"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#a5">~const_accessor</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy result after releasing the underlying reference. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_hash_map::const_accessor::concurrent_hash_map<Key,T,HashCompare,A>"></a>
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_hash_map<Key,T,HashCompare,A></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::concurrent_hash_map::const_accessor::accessor"></a>
+class </td><td class="memItemRight" valign="bottom"><b>accessor</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<class Body, typename Item><br>
- class tbb::internal::parallel_do_operator_selector< Body, Item ></h3>
+<h3>template<typename Key, typename T, typename HashCompare, typename A><br>
+ class tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</h3>
-For internal use only.
-<p>
-Selects one of the two possible forms of function call member operator.
+Combines data access, locking, and garbage collection.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00204.html b/doc/html/a00204.html
index bbe3fdf..b7e3d7a 100644
--- a/doc/html/a00204.html
+++ b/doc/html/a00204.html
@@ -1,72 +1,210 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::parallel_while< Body > Class Template Reference</title>
+<title>tbb::concurrent_queue< T, A > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::parallel_while< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Parallel iteration over a stream, with optional addition of more work.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_queue< T, A > Class Template Reference</h1>A high-performance thread-safe queue.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00298.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00330.html">concurrent_queue.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>.
<p>
-Inheritance diagram for tbb::parallel_while< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00078.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::concurrent_queue< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00037.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::parallel_while::value_type"></a>
-typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w0">value_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_queue::value_type"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w0">value_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Element type in the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_queue::allocator_type"></a>
+typedef A </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w1">allocator_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_queue::reference"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w2">reference</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_queue::const_reference"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w3">const_reference</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Const reference type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w4">size_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Integral type for representing size of the queue. <a href="#w4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_queue::difference_type"></a>
+typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#w5">difference_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Difference type for iterator. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_queue::iterator"></a>
+typedef <a class="el" href="a00207.html">internal::concurrent_queue_iterator</a><<br>
+ <a class="el" href="a00204.html">concurrent_queue</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_queue::const_iterator"></a>
+typedef <a class="el" href="a00207.html">internal::concurrent_queue_iterator</a><<br>
+ <a class="el" href="a00204.html">concurrent_queue</a>, const T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of items. <br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::parallel_while::parallel_while"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a0">parallel_while</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_queue::concurrent_queue"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a0">concurrent_queue</a> (const <a class="el" href="a00204.html#w1">allocator_type</a> &a=<a class="el" href="a00204.html#w1">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_queue::~concurrent_queue"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a1">~concurrent_queue</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::concurrent_queue::push"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a2">push</a> (const T &source)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a3">pop</a> (T &destination)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue. <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a4">push_if_not_full</a> (const T &source)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue an item at tail of queue if queue is not already full. <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a5">pop_if_present</a> (T &destination)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue an item from head of queue. <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00204.html#w4">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a6">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return number of pushes minus number of pops. <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::concurrent_queue::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a7">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Equivalent to <a class="el" href="a00204.html#a6">size()</a><=0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::concurrent_queue::capacity"></a>
+<a class="el" href="a00204.html#w4">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a8">capacity</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::parallel_while::~parallel_while"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a1">~parallel_while</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of allowed elements. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a9">set_capacity</a> (<a class="el" href="a00204.html#w4">size_type</a> capacity)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor cleans up data members before returning. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Stream> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00204.html#a2">run</a> (Stream &stream, const Body &body)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the capacity. <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_queue::get_allocator"></a>
+<a class="el" href="a00204.html#w1">allocator_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a10">get_allocator</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream. <a href="#a2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a3">add</a> (const <a class="el" href="a00204.html#w0">value_type</a> &item)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_queue::clear"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a11">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">clear the queue. not thread-safe. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::concurrent_queue::begin"></a>
+<a class="el" href="a00207.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_queue::end"></a>
+<a class="el" href="a00207.html">iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a14" doxytag="tbb::concurrent_queue::begin"></a>
+<a class="el" href="a00207.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_queue::end"></a>
+<a class="el" href="a00207.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::concurrent_queue::concurrent_queue"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#a16">concurrent_queue</a> (const <a class="el" href="a00204.html">concurrent_queue</a> &src, const <a class="el" href="a00204.html#w1">allocator_type</a> &a=<a class="el" href="a00204.html#w1">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a17" doxytag="tbb::concurrent_queue::concurrent_queue"></a>
+template<typename InputIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00204.html#a17">concurrent_queue</a> (InputIterator begin, InputIterator end, const <a class="el" href="a00204.html#w1">allocator_type</a> &a=<a class="el" href="a00204.html#w1">allocator_type</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">[begin,end) constructor <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_queue::internal::concurrent_queue_iterator"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::concurrent_queue_iterator</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running. <a href="#a3"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body><br>
- class tbb::parallel_while< Body ></h3>
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_queue< T, A ></h3>
-Parallel iteration over a stream, with optional addition of more work.
+A high-performance thread-safe queue.
<p>
-The Body b has the requirement: <br>
- "b(v)" <br>
- "b.argument_type" <br>
- where v is an argument_type
+Multiple threads may each push and pop concurrently. Assignment and copy construction are not allowed.
<p>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="w4" doxytag="tbb::concurrent_queue::size_type"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">typedef std::ptrdiff_t <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::<a class="el" href="a00204.html#w4">size_type</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Integral type for representing size of the queue.
+<p>
+Notice that the size_type is a signed integral type. This is because the size can be negative if there are pending pops without corresponding pushes. </td>
+ </tr>
+</table>
<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a3" doxytag="tbb::parallel_while::add"></a><p>
+<a class="anchor" name="a3" doxytag="tbb::concurrent_queue::pop"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::pop </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">T & </td>
+ <td class="mdname1" valign="top" nowrap> <em>destination</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Dequeue item from head of queue.
+<p>
+Block until an item becomes available, and then dequeue it. </td>
+ </tr>
+</table>
+<a class="anchor" name="a5" doxytag="tbb::concurrent_queue::pop_if_present"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" colspan="4">
-template<typename Body> </td>
+template<typename T, class A> </td>
</tr>
<tr>
- <td class="md" nowrap valign="top">void <a class="el" href="a00204.html">tbb::parallel_while</a>< Body >::add </td>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::pop_if_present </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="a00204.html#w0">value_type</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>item</em> </td>
+ <td class="md" nowrap valign="top">T & </td>
+ <td class="mdname1" valign="top" nowrap> <em>destination</em> </td>
<td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
+ <td class="md" nowrap><code> [inline]</code></td>
</tr>
</table>
</td>
@@ -80,40 +218,94 @@ template<typename Body> </td>
<td>
<p>
-Add a work item while running.
+Attempt to dequeue an item from head of queue.
<p>
-Should be executed only by body.apply or a thread spawned therefrom. </td>
+Does not wait for item to become available. Returns true if successful; false otherwise. </td>
</tr>
</table>
-<a class="anchor" name="a2" doxytag="tbb::parallel_while::run"></a><p>
+<a class="anchor" name="a4" doxytag="tbb::concurrent_queue::push_if_not_full"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" colspan="4">
-template<typename Body> </td>
+template<typename T, class A> </td>
</tr>
<tr>
+ <td class="md" nowrap valign="top">bool <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::push_if_not_full </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const T & </td>
+ <td class="mdname1" valign="top" nowrap> <em>source</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Enqueue an item at tail of queue if queue is not already full.
+<p>
+Does not wait for queue to become not full. Returns true if item is pushed; false if queue was already full. </td>
+ </tr>
+</table>
+<a class="anchor" name="a9" doxytag="tbb::concurrent_queue::set_capacity"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
<td class="md" colspan="4">
-template<typename Stream> </td>
+template<typename T, class A> </td>
</tr>
<tr>
- <td class="md" nowrap valign="top">void <a class="el" href="a00204.html">tbb::parallel_while</a>< Body >::run </td>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::set_capacity </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">Stream & </td>
- <td class="mdname" nowrap> <em>stream</em>, </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00204.html#w4">size_type</a> </td>
+ <td class="mdname1" valign="top" nowrap> <em>capacity</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
</tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Set the capacity.
+<p>
+Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail, and subsequent push operations to block forever. </td>
+ </tr>
+</table>
+<a class="anchor" name="a6" doxytag="tbb::concurrent_queue::size"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const Body & </td>
- <td class="mdname" nowrap> <em>body</em></td>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
</tr>
<tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"></td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00204.html#w4">size_type</a> <a class="el" href="a00204.html">tbb::concurrent_queue</a>< T, A >::size </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
</tr>
</table>
</td>
@@ -127,18 +319,16 @@ template<typename Stream> </td>
<td>
<p>
-Apply body.apply to each item in the stream.
+Return number of pushes minus number of pops.
<p>
-A Stream s has the requirements <br>
- "S::value_type" <br>
- "s.pop_if_present(value) is convertible to bool </td>
+Note that the result can be negative if there are pops waiting for the corresponding pushes. The result can also exceed <a class="el" href="a00204.html#a8">capacity()</a> if there are push operations in flight. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00298.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00330.html">concurrent_queue.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00205.html b/doc/html/a00205.html
index 597633f..0a0f91c 100644
--- a/doc/html/a00205.html
+++ b/doc/html/a00205.html
@@ -1,44 +1,139 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::partition_type_base Class Reference</title>
+<title>tbb::internal::concurrent_queue_base_v3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::partition_type_base Class Reference</h1>Provides default methods for partition objects without affinity.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_base_v3 Class Reference</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00299.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00330.html">concurrent_queue.h</a>></code>
<p>
-Inherited by tbb::auto_partitioner::partition_type, and tbb::simple_partitioner::partition_type.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::internal::partition_type_base:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00080.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by <a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>.
+<p>
+Inheritance diagram for tbb::internal::concurrent_queue_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00033.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::partition_type_base::set_affinity"></a>
-void </td><td class="memItemRight" valign="bottom"><b>set_affinity</b> (<a class="el" href="a00228.html">task</a> &t)</td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_base_v3"></a>
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_base_v3</b> (size_t <a class="el" href="a00205.html#p2">item_size</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_queue_base_v3::internal_push"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b2">internal_push</a> (const void *src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Enqueue item at tail of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_queue_base_v3::internal_pop"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b3">internal_pop</a> (void *dst)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dequeue item from head of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_queue_base_v3::internal_push_if_not_full"></a>
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b4">internal_push_if_not_full</a> (const void *src)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to enqueue item onto queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b5">internal_pop_if_present</a> (void *dst)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Attempt to dequeue item from queue. <a href="#b5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6" doxytag="tbb::internal::concurrent_queue_base_v3::internal_size"></a>
+ptrdiff_t __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b6">internal_size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get size of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b7" doxytag="tbb::internal::concurrent_queue_base_v3::internal_set_capacity"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b7">internal_set_capacity</a> (ptrdiff_t capacity, size_t element_size)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">set the queue capacity <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8" doxytag="tbb::internal::concurrent_queue_base_v3::allocate_page"></a>
+virtual <a class="el" href="a00206.html">page</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b8">allocate_page</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">custom allocator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9" doxytag="tbb::internal::concurrent_queue_base_v3::deallocate_page"></a>
+virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b9">deallocate_page</a> (<a class="el" href="a00206.html">page</a> *p)=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">custom de-allocator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b10" doxytag="tbb::internal::concurrent_queue_base_v3::internal_finish_clear"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b10">internal_finish_clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">free any remaining pages <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b11" doxytag="tbb::internal::concurrent_queue_base_v3::internal_throw_exception"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b11">internal_throw_exception</a> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::partition_type_base::note_affinity"></a>
-void </td><td class="memItemRight" valign="bottom"><b>note_affinity</b> (<a class="el" href="a00228.html#w1">task::affinity_id</a> id)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">throw an exception <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b12" doxytag="tbb::internal::concurrent_queue_base_v3::assign"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#b12">assign</a> (const <a class="el" href="a00205.html">concurrent_queue_base_v3</a> &src)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::partition_type_base::continue_after_execute_range"></a>
-<a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>continue_after_execute_range</b> (<a class="el" href="a00228.html">task</a> &t)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">copy internal representation <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_queue_base_v3::my_capacity"></a>
+ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#p0">my_capacity</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::partition_type_base::decide_whether_to_delay"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>decide_whether_to_delay</b> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Capacity of the queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p1" doxytag="tbb::internal::concurrent_queue_base_v3::items_per_page"></a>
+size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#p1">items_per_page</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::partition_type_base::spawn_or_delay"></a>
-void </td><td class="memItemRight" valign="bottom"><b>spawn_or_delay</b> (bool, <a class="el" href="a00228.html">task</a> &a, <a class="el" href="a00228.html">task</a> &b)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Always a power of 2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p2" doxytag="tbb::internal::concurrent_queue_base_v3::item_size"></a>
+size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#p2">item_size</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Size of an item. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_rep"></a>
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_rep</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::concurrent_queue_base_v3::micro_queue"></a>
+struct </td><td class="memItemRight" valign="bottom"><b>micro_queue</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::concurrent_queue_base_v3::micro_queue_pop_finalizer"></a>
+class </td><td class="memItemRight" valign="bottom"><b>micro_queue_pop_finalizer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_iterator_rep"></a>
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_rep</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::internal::concurrent_queue_base_v3::concurrent_queue_iterator_base_v3"></a>
+class </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_base_v3</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Provides default methods for partition objects without affinity.
+For internal use only.
+<p>
+Type-independent portion of <a class="el" href="a00204.html">concurrent_queue</a>.
<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="b5" doxytag="tbb::internal::concurrent_queue_base_v3::internal_pop_if_present"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">bool __TBB_EXPORTED_METHOD tbb::internal::concurrent_queue_base_v3::internal_pop_if_present </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname1" valign="top" nowrap> <em>dst</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [protected]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Attempt to dequeue item from queue.
+<p>
+NULL if there was no item to dequeue. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00299.html">partitioner.h</a></ul>
+<li><a class="el" href="a00330.html">concurrent_queue.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00206.html b/doc/html/a00206.html
index c5457b1..82ecfdd 100644
--- a/doc/html/a00206.html
+++ b/doc/html/a00206.html
@@ -1,57 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::pipeline Class Reference</title>
+<title>tbb::internal::concurrent_queue_base_v3::page Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::pipeline Class Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A processing pipeling that applies filters to items.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_base_v3::page Struct Reference</h1>Prefix on a page.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00300.html">pipeline.h</a>></code>
+<code>#include <<a class="el" href="a00330.html">concurrent_queue.h</a>></code>
<p>
-<a href="a00088.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00034.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::pipeline::pipeline"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#a0">pipeline</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::concurrent_queue_base_v3::page::next"></a>
+<a class="el" href="a00206.html">page</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty pipeline. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::pipeline::~pipeline"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#a1">~pipeline</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy pipeline. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::pipeline::add_filter"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#a2">add_filter</a> (<a class="el" href="a00189.html">filter</a> &filter_)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add filter to end of pipeline. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::pipeline::run"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#a3">run</a> (size_t max_number_of_live_tokens)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::pipeline::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#a4">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::pipeline::internal::stage_task"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::pipeline::filter"></a>
-class </td><td class="memItemRight" valign="bottom"><b>filter</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::concurrent_queue_base_v3::page::mask"></a>
+<a class="el" href="a00319.html#a21">uintptr</a> </td><td class="memItemRight" valign="bottom"><b>mask</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-A processing pipeling that applies filters to items.
+Prefix on a page.
<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00300.html">pipeline.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00330.html">concurrent_queue.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00207.html b/doc/html/a00207.html
index cf71361..2718c96 100644
--- a/doc/html/a00207.html
+++ b/doc/html/a00207.html
@@ -1,33 +1,96 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::pre_scan_tag Struct Reference</title>
+<title>tbb::internal::concurrent_queue_iterator< Container, Value > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::pre_scan_tag Struct Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Used to indicate that the initial scan is being performed.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00330.html">concurrent_queue.h</a>></code>
<p>
-<a href="a00067.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a>.
+<p>
+Inheritance diagram for tbb::internal::concurrent_queue_iterator< Container, Value >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00036.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::pre_scan_tag::is_final_scan"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::concurrent_queue_iterator::concurrent_queue_iterator"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a0">concurrent_queue_iterator</a> (const <a class="el" href="a00205.html">concurrent_queue_base</a> &queue)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct iterator pointing to head of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a2">concurrent_queue_iterator</a> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::concurrent_queue_iterator::operator="></a>
+<a class="el" href="a00207.html">concurrent_queue_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a3">operator=</a> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a> &other)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Iterator assignment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::concurrent_queue_iterator::operator *"></a>
+Value & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a4">operator *</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reference to current item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::concurrent_queue_iterator::operator->"></a>
+Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::concurrent_queue_iterator::operator++"></a>
+<a class="el" href="a00207.html">concurrent_queue_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a6">operator++</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Advance to next item in queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::concurrent_queue_iterator::operator++"></a>
+Value * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#a7">operator++</a> (int)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_iterator::::tbb::concurrent_queue"></a>
+class </td><td class="memItemRight" valign="bottom"><b>::tbb::concurrent_queue</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Used to indicate that the initial scan is being performed.
+<h3>template<typename Container, typename Value><br>
+ class tbb::internal::concurrent_queue_iterator< Container, Value ></h3>
+
+Meets requirements of a forward iterator for STL.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+Value is either the T or const T type of the container.
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a2" doxytag="tbb::internal::concurrent_queue_iterator::concurrent_queue_iterator"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Container, typename Value> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator</a>< Container, Value >::<a class="el" href="a00207.html">concurrent_queue_iterator</a> </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< Container, typename Container::value_type > & </td>
+ <td class="mdname1" valign="top" nowrap> <em>other</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+If Value==Container::value_type, then this routine is the copy constructor. If Value==const Container::value_type, then this routine is a conversion constructor. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00330.html">concurrent_queue.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00208.html b/doc/html/a00208.html
index f61a62a..add5f56 100644
--- a/doc/html/a00208.html
+++ b/doc/html/a00208.html
@@ -1,45 +1,67 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::queuing_mutex Class Reference</title>
+<title>tbb::internal::concurrent_queue_iterator_base_v3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_mutex Class Reference</h1>Queuing lock with local-only spinning.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_queue_iterator_base_v3 Class Reference</h1>Type-independent portion of <a class="el" href="a00207.html">concurrent_queue_iterator</a>.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00301.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00330.html">concurrent_queue.h</a>></code>
<p>
-<a href="a00089.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by <a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>.
+<p>
+Inheritance diagram for tbb::internal::concurrent_queue_iterator_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00035.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::queuing_mutex::queuing_mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#a0">queuing_mutex</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b0">concurrent_queue_iterator_base_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b1">concurrent_queue_iterator_base_v3</a> (const <a class="el" href="a00208.html">concurrent_queue_iterator_base_v3</a> &i)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3"></a>
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b2">concurrent_queue_iterator_base_v3</a> (const <a class="el" href="a00205.html">concurrent_queue_base</a> &queue)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::queuing_mutex::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct iterator pointing to head of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::assign"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b3">assign</a> (const <a class="el" href="a00208.html">concurrent_queue_iterator_base_v3</a> &i)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::queuing_mutex::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::advance"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b4">advance</a> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::queuing_mutex::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Advance iterator one step towards tail of queue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::~concurrent_queue_iterator_base_v3"></a>
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#b5">~concurrent_queue_iterator_base_v3</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::my_item"></a>
+void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#p0">my_item</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to current item. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::queuing_mutex::scoped_lock"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::operator=="></a>
+template<typename C, typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n1" doxytag="tbb::internal::concurrent_queue_iterator_base_v3::operator!="></a>
+template<typename C, typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Queuing lock with local-only spinning.
+Type-independent portion of <a class="el" href="a00207.html">concurrent_queue_iterator</a>.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00301.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00330.html">concurrent_queue.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00209.html b/doc/html/a00209.html
index 6f33089..9565cb8 100644
--- a/doc/html/a00209.html
+++ b/doc/html/a00209.html
@@ -1,56 +1,289 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::queuing_mutex::scoped_lock Class Reference</title>
+<title>tbb::concurrent_vector< T, A > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::concurrent_vector< T, A > Class Template Reference</h1>Concurrent vector container
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00301.html">queuing_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00331.html">concurrent_vector.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>.
<p>
-Inheritance diagram for tbb::queuing_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00090.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::concurrent_vector< T, A >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00044.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::concurrent_vector::size_type"></a>
+typedef internal::concurrent_vector_base_v3::size_type </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::concurrent_vector::allocator_type"></a>
+typedef internal::allocator_base<<br>
+ T, A >::allocator_type </td><td class="memItemRight" valign="bottom"><b>allocator_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::concurrent_vector::value_type"></a>
+typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::concurrent_vector::difference_type"></a>
+typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::concurrent_vector::reference"></a>
+typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::concurrent_vector::const_reference"></a>
+typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::concurrent_vector::pointer"></a>
+typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w7" doxytag="tbb::concurrent_vector::const_pointer"></a>
+typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w8" doxytag="tbb::concurrent_vector::iterator"></a>
+typedef <a class="el" href="a00274.html">internal::vector_iterator</a><<br>
+ <a class="el" href="a00209.html">concurrent_vector</a>, T > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w9" doxytag="tbb::concurrent_vector::const_iterator"></a>
+typedef <a class="el" href="a00274.html">internal::vector_iterator</a><<br>
+ <a class="el" href="a00209.html">concurrent_vector</a>, const <br>
+T > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w10" doxytag="tbb::concurrent_vector::reverse_iterator"></a>
+typedef std::reverse_iterator<<br>
+ <a class="el" href="a00274.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w11" doxytag="tbb::concurrent_vector::const_reverse_iterator"></a>
+typedef std::reverse_iterator<<br>
+ <a class="el" href="a00274.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w12" doxytag="tbb::concurrent_vector::reverse_iterator"></a>
+typedef std::reverse_iterator<<br>
+ <a class="el" href="a00274.html">iterator</a>, T, T &, T * > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w13" doxytag="tbb::concurrent_vector::const_reverse_iterator"></a>
+typedef std::reverse_iterator<<br>
+ <a class="el" href="a00274.html">const_iterator</a>, T, const <br>
+T &, const T * > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w14" doxytag="tbb::concurrent_vector::range_type"></a>
+typedef generic_range_type<<br>
+ <a class="el" href="a00274.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>range_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w15" doxytag="tbb::concurrent_vector::const_range_type"></a>
+typedef generic_range_type<<br>
+ <a class="el" href="a00274.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_range_type</b></td></tr>
+
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a0">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a0">concurrent_vector</a> (const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a1">concurrent_vector</a> (const <a class="el" href="a00209.html">concurrent_vector</a> &vector, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+template<class M> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#a2">concurrent_vector</a> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, M > &vector, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Copying constructor for vector with different allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a3">concurrent_vector</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a4">concurrent_vector</a> (size_type n, const_reference t, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with initial size specified by argument n, initialization by copying of t, and given allocator instance. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a5" doxytag="tbb::concurrent_vector::concurrent_vector"></a>
+template<class I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#a5">concurrent_vector</a> (I first, I last, const allocator_type &a=allocator_type())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construction with copying iteration range and given allocator instance. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::concurrent_vector::operator="></a>
+<a class="el" href="a00209.html">concurrent_vector</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a6">operator=</a> (const <a class="el" href="a00209.html">concurrent_vector</a> &vector)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a7" doxytag="tbb::concurrent_vector::operator="></a>
+template<class M> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00209.html">concurrent_vector</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#a7">operator=</a> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, M > &vector)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Assignment for vector with different allocator type. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a8">grow_by</a> (size_type delta)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements. <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a9">grow_by</a> (size_type delta, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow by "delta" elements using copying constuctor. <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::concurrent_vector::grow_to_at_least"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a10">grow_to_at_least</a> (size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Grow array until it has at least n elements. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::concurrent_vector::push_back"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a11">push_back</a> (const_reference item)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Push item. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a12">operator[]</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::concurrent_vector::operator[]"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a13">operator[]</a> (size_type index) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a14" doxytag="tbb::concurrent_vector::at"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a14">at</a> (size_type index)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get reference to element at given index. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::concurrent_vector::at"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a15">at</a> (size_type index) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const reference to element at given index. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::concurrent_vector::range"></a>
+range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a16">range</a> (size_t grainsize=1)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get range for iterating with parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::concurrent_vector::range"></a>
+const_range_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a17">range</a> (size_t grainsize=1) const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Get const range for iterating with parallel algorithms. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a18" doxytag="tbb::concurrent_vector::size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a18">size</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::concurrent_vector::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a19">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Return size of vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a20" doxytag="tbb::concurrent_vector::capacity"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a20">capacity</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a1">scoped_lock</a> (<a class="el" href="a00208.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size to which array can grow without allocating more memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a21">reserve</a> (size_type n)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::queuing_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a2">~scoped_lock</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate enough space to grow to size n without having to allocate more memory later. <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a22" doxytag="tbb::concurrent_vector::compact"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a22">compact</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::queuing_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a3">acquire</a> (<a class="el" href="a00208.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Optimize memory usage and fragmentation. Returns true if optimization occurred. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a23" doxytag="tbb::concurrent_vector::max_size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a23">max_size</a> () const </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::queuing_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a4">try_acquire</a> (<a class="el" href="a00208.html">queuing_mutex</a> &m)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Upper bound on argument to reserve. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a24" doxytag="tbb::concurrent_vector::begin"></a>
+<a class="el" href="a00274.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a24">begin</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::queuing_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a5">release</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">start iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a25" doxytag="tbb::concurrent_vector::end"></a>
+<a class="el" href="a00274.html">iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a25">end</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a26" doxytag="tbb::concurrent_vector::begin"></a>
+<a class="el" href="a00274.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a26">begin</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a27" doxytag="tbb::concurrent_vector::end"></a>
+<a class="el" href="a00274.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a27">end</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a28" doxytag="tbb::concurrent_vector::rbegin"></a>
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a28">rbegin</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse start iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a29" doxytag="tbb::concurrent_vector::rend"></a>
+reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a29">rend</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse end iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a30" doxytag="tbb::concurrent_vector::rbegin"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a30">rbegin</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse start const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a31" doxytag="tbb::concurrent_vector::rend"></a>
+const_reverse_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a31">rend</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">reverse end const iterator <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32" doxytag="tbb::concurrent_vector::front"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a32">front</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">the first item <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a33" doxytag="tbb::concurrent_vector::front"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a33">front</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">the first item const <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a34" doxytag="tbb::concurrent_vector::back"></a>
+reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a34">back</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">the last item <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a35" doxytag="tbb::concurrent_vector::back"></a>
+const_reference </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a35">back</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">the last item const <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36" doxytag="tbb::concurrent_vector::get_allocator"></a>
+allocator_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a36">get_allocator</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">return allocator object <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a37" doxytag="tbb::concurrent_vector::assign"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a37">assign</a> (size_type n, const_reference t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">assign n items by copying t item <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a38" doxytag="tbb::concurrent_vector::assign"></a>
+template<class I> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#a38">assign</a> (I first, I last)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">assign range [first, last) <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a39" doxytag="tbb::concurrent_vector::swap"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a39">swap</a> (<a class="el" href="a00209.html">concurrent_vector</a> &vector)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">swap two instances <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a40">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear container while keeping memory allocated. <a href="#a40"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a41" doxytag="tbb::concurrent_vector::~concurrent_vector"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#a41">~concurrent_vector</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear and destroy vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a42" doxytag="tbb::concurrent_vector::internal_vector_base"></a>
+const <a class="el" href="a00210.html">internal::concurrent_vector_base_v3</a> & </td><td class="memItemRight" valign="bottom"><b>internal_vector_base</b> () const </td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::concurrent_vector::internal::vector_iterator"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern.
+<h3>template<typename T, class A><br>
+ class tbb::concurrent_vector< T, A ></h3>
+
+Concurrent vector container
+<p>
+<a class="el" href="a00209.html">concurrent_vector</a> is a container having the following main properties:<ul>
+<li>It provides random indexed access to its elements. The index of the first element is 0.</li><li>It ensures safe concurrent growing its size (different threads can safely append new elements).</li><li>Adding new elements does not invalidate existing iterators and does not change indices of existing items.</li></ul>
<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
+<dl compact><dt><b>Compatibility</b></dt><dd>The class meets all Container Requirements and Reversible Container Requirements from C++ Standard (See ISO/IEC 14882:2003(E), clause 23.1). But it doesn't meet Sequence Requirements due to absence of insert() and erase() methods.</dd></dl>
+<dl compact><dt><b>Exception Safety</b></dt><dd>Methods working with memory allocation and/or new elements construction can throw an exception if allocator fails to allocate memory or element's default constructor throws one. Concurrent vector's element of type T must conform to the following requirements:<ul>
+<li>Throwing an exception is forbidden for destructor of T.</li><li>Default constructor of T must not throw an exception OR its non-virtual destructor must safely work when its object memory is zero-initialized.</li></ul>
+Otherwise, the program's behavior is undefined. </dd></dl>
+<dl compact><dt><b></b></dt><dd>If an exception happens inside growth or assignment operation, an instance of the vector becomes invalid unless it is stated otherwise in the method documentation. Invalid state means:<ul>
+<li>There are no guaranties that all items were initialized by a constructor. The rest of items is zero-filled, including item where exception happens.</li><li>An invalid vector instance cannot be repaired; it is unable to grow anymore.</li><li>Size and capacity reported by the vector are incorrect, and calculated as if the failed operation were successful.</li><li>Attempt to access not allocated elements using operator[] or iterators results in access violation or segmentation fault exc [...]
+If a concurrent grow operation successfully completes, all the elements it has added to the vector will remain valid and accessible even if one of subsequent grow operations fails.</dd></dl>
+<dl compact><dt><b>Fragmentation</b></dt><dd>Unlike an STL vector, a <a class="el" href="a00209.html">concurrent_vector</a> does not move existing elements if it needs to allocate more memory. The container is divided into a series of contiguous arrays of elements. The first reservation, growth, or assignment operation determines the size of the first array. Using small number of elements as initial size incurs fragmentation that may increase element access time. Internal layout can be o [...]
+<dl compact><dt><b>Changes since TBB 2.0</b></dt><dd><ul>
+<li>Implemented exception-safety guaranties</li><li>Added template argument for allocator</li><li>Added allocator argument in constructors</li><li>Faster index calculation</li><li>First growth call specifies a number of segments to be merged in the first allocation.</li><li>Fixed memory blow up for swarm of vector's instances of small size</li><li>Added <a class="el" href="a00209.html#a9">grow_by(size_type n, const_reference t)</a> growth using copying constructor to init new items.</li> [...]
+</dd></dl>
+
<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::queuing_mutex::scoped_lock::scoped_lock"></a><p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a40" doxytag="tbb::concurrent_vector::clear"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00209.html">tbb::concurrent_vector</a>< T, A >::clear </td>
<td class="md" valign="top">( </td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top"> ) </td>
@@ -68,21 +301,136 @@ It helps to avoid the common problem of forgetting to release lock. It also nice
<td>
<p>
-Construct lock that has not acquired a mutex.
+Clear container while keeping memory allocated.
<p>
-Equivalent to zero-initialization of *this. </td>
+To free up the memory, use in conjunction with method <a class="el" href="a00209.html#a22">compact()</a>. Not thread safe * </td>
</tr>
</table>
-<a class="anchor" name="a1" doxytag="tbb::queuing_mutex::scoped_lock::scoped_lock"></a><p>
+<a class="anchor" name="a9" doxytag="tbb::concurrent_vector::grow_by"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">size_type <a class="el" href="a00209.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_type </td>
+ <td class="mdname" nowrap> <em>delta</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const_reference </td>
+ <td class="mdname" nowrap> <em>t</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Grow by "delta" elements using copying constuctor.
+<p>
+Returns old size. </td>
+ </tr>
+</table>
+<a class="anchor" name="a8" doxytag="tbb::concurrent_vector::grow_by"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">size_type <a class="el" href="a00209.html">tbb::concurrent_vector</a>< T, A >::grow_by </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_type </td>
+ <td class="mdname1" valign="top" nowrap> <em>delta</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Grow by "delta" elements.
+<p>
+Returns old size. </td>
+ </tr>
+</table>
+<a class="anchor" name="a12" doxytag="tbb::concurrent_vector::operator[]"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">reference <a class="el" href="a00209.html">tbb::concurrent_vector</a>< T, A >::operator[] </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_type </td>
+ <td class="mdname1" valign="top" nowrap> <em>index</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Get reference to element at given index.
+<p>
+This method is thread-safe for concurrent reads, and also while growing the vector, as long as the calling thread has checked that index<<a class="el" href="a00209.html#a18">size()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a21" doxytag="tbb::concurrent_vector::reserve"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename T, class A> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00209.html">tbb::concurrent_vector</a>< T, A >::reserve </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00208.html">queuing_mutex</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>m</em> </td>
+ <td class="md" nowrap valign="top">size_type </td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>
@@ -98,16 +446,16 @@ Equivalent to zero-initialization of *this. </td>
<td>
<p>
-Acquire lock on given mutex.
+Allocate enough space to grow to size n without having to allocate more memory later.
<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. </td>
+Like most of the methods provided for STL compatibility, this method is *not* thread safe. The capacity afterwards may be bigger than the requested reservation. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00301.html">queuing_mutex.h</a></ul>
+<li><a class="el" href="a00331.html">concurrent_vector.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00210.html b/doc/html/a00210.html
index 59db09a..99b8a76 100644
--- a/doc/html/a00210.html
+++ b/doc/html/a00210.html
@@ -1,51 +1,153 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::queuing_rw_mutex Class Reference</title>
+<title>tbb::internal::concurrent_vector_base_v3 Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_rw_mutex Class Reference</h1>Reader-writer lock with local-only spinning.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_vector_base_v3 Class Reference</h1>Base class of concurrent vector implementation.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00302.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00331.html">concurrent_vector.h</a>></code>
<p>
-<a href="a00091.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by <a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a><code> [private]</code>.
+<p>
+Inheritance diagram for tbb::internal::concurrent_vector_base_v3:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::queuing_rw_mutex::queuing_rw_mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#a0">queuing_rw_mutex</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Protected Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x0" doxytag="tbb::internal::concurrent_vector_base_v3::segment_index_t"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>segment_index_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x1" doxytag="tbb::internal::concurrent_vector_base_v3::size_type"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x2" doxytag="tbb::internal::concurrent_vector_base_v3::internal_array_op1"></a>
+typedef void(__TBB_EXPORTED_FUNC * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#x2">internal_array_op1</a> )(void *begin, size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An operation on an n-element array starting at begin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="x3" doxytag="tbb::internal::concurrent_vector_base_v3::internal_array_op2"></a>
+typedef void(__TBB_EXPORTED_FUNC * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#x3">internal_array_op2</a> )(void *dst, const void *src, size_type n)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An operation on n-element destination array and n-element source array. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom">{ <b>default_initial_segments</b> = 1,
+<a class="el" href="a00210.html#x7x5">pointers_per_short_table</a> = 3,
+<b>pointers_per_long_table</b> = sizeof(segment_index_t) * 8
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2" doxytag="tbb::internal::concurrent_vector_base_v3::internal_reserve"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_reserve</b> (size_type n, size_type element_size, size_type max_size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b3" doxytag="tbb::internal::concurrent_vector_base_v3::internal_capacity"></a>
+size_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_capacity</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow_to_at_least"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_grow_to_at_least</b> (size_type new_size, size_type element_size, <a class="el" href="a00210.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b5" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow"></a>
+void </td><td class="memItemRight" valign="bottom"><b>internal_grow</b> (size_type start, size_type finish, size_type element_size, <a class="el" href="a00210.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b6" doxytag="tbb::internal::concurrent_vector_base_v3::internal_grow_by"></a>
+size_type __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_grow_by</b> (size_type delta, size_type element_size, <a class="el" href="a00210.html#x3">internal_array_op2</a> init, const void *src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b7" doxytag="tbb::internal::concurrent_vector_base_v3::internal_push_back"></a>
+void *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_push_back</b> (size_type element_size, size_type &index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8" doxytag="tbb::internal::concurrent_vector_base_v3::internal_clear"></a>
+segment_index_t __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_clear</b> (<a class="el" href="a00210.html#x2">internal_array_op1</a> destroy)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9" doxytag="tbb::internal::concurrent_vector_base_v3::internal_compact"></a>
+void *__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_compact</b> (size_type element_size, void *table, <a class="el" href="a00210.html#x2">internal_array_op1</a> destroy, <a class="el" href="a00210.html#x3">internal_array_op2</a> copy)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::queuing_rw_mutex::~queuing_rw_mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#a1">~queuing_rw_mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b10" doxytag="tbb::internal::concurrent_vector_base_v3::internal_copy"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_copy</b> (const <a class="el" href="a00210.html">concurrent_vector_base_v3</a> &src, size_type element_size, <a class="el" href="a00210.html#x3">internal_array_op2</a> copy)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::queuing_rw_mutex::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b11" doxytag="tbb::internal::concurrent_vector_base_v3::internal_assign"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_assign</b> (const <a class="el" href="a00210.html">concurrent_vector_base_v3</a> &src, size_type element_size, <a class="el" href="a00210.html#x2">internal_array_op1</a> destroy, <a class="el" href="a00210.html#x3">internal_array_op2</a> assign, <a class="el" href="a00210.html#x3">internal_array_op2</a> copy)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::queuing_rw_mutex::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b12" doxytag="tbb::internal::concurrent_vector_base_v3::internal_throw_exception"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_throw_exception</b> (size_type) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::queuing_rw_mutex::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b13" doxytag="tbb::internal::concurrent_vector_base_v3::internal_swap"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_swap</b> (<a class="el" href="a00210.html">concurrent_vector_base_v3</a> &v)</td></tr>
+<tr><td colspan="2"><br><h2>Static Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0" doxytag="tbb::internal::concurrent_vector_base_v3::segment_index_of"></a>
+segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_index_of</b> (size_type index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f1" doxytag="tbb::internal::concurrent_vector_base_v3::segment_base"></a>
+segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_base</b> (segment_index_t k)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f2" doxytag="tbb::internal::concurrent_vector_base_v3::segment_base_index_of"></a>
+segment_index_t </td><td class="memItemRight" valign="bottom"><b>segment_base_index_of</b> (segment_index_t &index)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f3" doxytag="tbb::internal::concurrent_vector_base_v3::segment_size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><b>segment_size</b> (segment_index_t k)</td></tr>
+
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::internal::concurrent_vector_base_v3::vector_allocator_ptr"></a>
+void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#p0">vector_allocator_ptr</a> )(<a class="el" href="a00210.html">concurrent_vector_base_v3</a> &, size_t)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">allocator function pointer <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p1" doxytag="tbb::internal::concurrent_vector_base_v3::my_first_block"></a>
+<a class="el" href="a00191.html">atomic</a>< size_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#p1">my_first_block</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">count of segments in the first block <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p2" doxytag="tbb::internal::concurrent_vector_base_v3::my_early_size"></a>
+<a class="el" href="a00191.html">atomic</a>< size_type > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#p2">my_early_size</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Requested size of vector. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p3" doxytag="tbb::internal::concurrent_vector_base_v3::my_segment"></a>
+<a class="el" href="a00191.html">atomic</a>< segment_t * > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#p3">my_segment</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the segments table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p4" doxytag="tbb::internal::concurrent_vector_base_v3::my_storage"></a>
+segment_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#p4">my_storage</a> [pointers_per_short_table]</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">embedded storage of segment pointers <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::queuing_rw_mutex::scoped_lock"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::concurrent_vector_base_v3::helper"></a>
+class </td><td class="memItemRight" valign="bottom"><b>helper</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Reader-writer lock with local-only spinning.
+Base class of concurrent vector implementation.
<p>
-Adapted from Krieger, Stumm, et al. pseudocode at <a href="http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="x7" doxytag="tbb::internal::concurrent_vector_base_v3::@0"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">anonymous enum<code> [protected]</code> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="x7x5" doxytag="pointers_per_short_table"></a>pointers_per_short_table</em> </td><td>
+Number of slots for segment's pointers inside the class. </td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00302.html">queuing_rw_mutex.h</a></ul>
+<li><a class="el" href="a00331.html">concurrent_vector.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00211.html b/doc/html/a00211.html
index aae89f7..f07f2ad 100644
--- a/doc/html/a00211.html
+++ b/doc/html/a00211.html
@@ -1,159 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::queuing_rw_mutex::scoped_lock Class Reference</title>
+<title>tbb::internal::concurrent_vector_base_v3::internal_segments_table Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::queuing_rw_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::concurrent_vector_base_v3::internal_segments_table Struct Reference</h1>Internal structure for compact().
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00302.html">queuing_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00331.html">concurrent_vector.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
-<p>
-Inheritance diagram for tbb::queuing_rw_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00092.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00041.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a0">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a1">scoped_lock</a> (<a class="el" href="a00210.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::queuing_rw_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a2">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::queuing_rw_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a3">acquire</a> (<a class="el" href="a00210.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::queuing_rw_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a4">try_acquire</a> (<a class="el" href="a00210.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::queuing_rw_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a5">release</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::concurrent_vector_base_v3::internal_segments_table::first_block"></a>
+segment_index_t </td><td class="memItemRight" valign="bottom"><b>first_block</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a6">upgrade_to_writer</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::concurrent_vector_base_v3::internal_segments_table::table"></a>
+void * </td><td class="memItemRight" valign="bottom"><b>table</b> [pointers_per_long_table]</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer. <a href="#a6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::queuing_rw_mutex::scoped_lock::downgrade_to_reader"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#a7">downgrade_to_reader</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern.
-<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::queuing_rw_mutex::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Construct lock that has not acquired a mutex.
+Internal structure for compact().
<p>
-Equivalent to zero-initialization of *this. </td>
- </tr>
-</table>
-<a class="anchor" name="a1" doxytag="tbb::queuing_rw_mutex::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00210.html">queuing_rw_mutex</a> & </td>
- <td class="mdname" nowrap> <em>m</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>bool </td>
- <td class="mdname" nowrap> <em>write</em> = <code>true</code></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Acquire lock on given mutex.
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a6" doxytag="tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Upgrade reader to become a writer.
-<p>
-Returns true if the upgrade happened without re-acquiring the lock and false if opposite </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00302.html">queuing_rw_mutex.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00331.html">concurrent_vector.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00212.html b/doc/html/a00212.html
index ac7a0ea..edcf1d0 100644
--- a/doc/html/a00212.html
+++ b/doc/html/a00212.html
@@ -1,36 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Struct Template Reference</title>
+<title>tbb::internal::do_group_task_forward< Iterator, Body, Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Struct Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_group_task_forward< Iterator, Body, Item > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Body class used to sort elements in a range that is smaller than the grainsize.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00297.html">parallel_sort.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00074.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::do_group_task_forward< Iterator, Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00066.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::quick_sort_body::operator()"></a>
-void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="a00213.html">quick_sort_range</a>< RandomAccessIterator, Compare > &range) const </td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::do_group_task_forward::do_task_iter"></a>
+class </td><td class="memItemRight" valign="bottom"><b>do_task_iter</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename RandomAccessIterator, typename Compare><br>
- struct tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></h3>
+<h3>template<typename Iterator, typename Body, typename Item><br>
+ class tbb::internal::do_group_task_forward< Iterator, Body, Item ></h3>
-Body class used to sort elements in a range that is smaller than the grainsize.
+For internal use only.
+<p>
+Unpacks a block of iterations.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00297.html">parallel_sort.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00213.html b/doc/html/a00213.html
index 075e584..0e93338 100644
--- a/doc/html/a00213.html
+++ b/doc/html/a00213.html
@@ -1,61 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Struct Template Reference</title>
+<title>tbb::internal::do_iteration_task< Body, Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Struct Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_iteration_task< Body, Item > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Range used in quicksort to split elements into subranges based on a value.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00297.html">parallel_sort.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::do_iteration_task< Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00063.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::quick_sort_range::quick_sort_range"></a>
- </td><td class="memItemRight" valign="bottom"><b>quick_sort_range</b> (RandomAccessIterator begin_, size_t size_, const Compare &comp_)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::quick_sort_range::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>empty</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::quick_sort_range::is_divisible"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>is_divisible</b> () const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::quick_sort_range::quick_sort_range"></a>
- </td><td class="memItemRight" valign="bottom"><b>quick_sort_range</b> (<a class="el" href="a00213.html">quick_sort_range</a> &range, <a class="el" href="a00221.html">split</a>)</td></tr>
-
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::quick_sort_range::comp"></a>
-const Compare & </td><td class="memItemRight" valign="bottom"><b>comp</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::quick_sort_range::begin"></a>
-RandomAccessIterator </td><td class="memItemRight" valign="bottom"><b>begin</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="tbb::internal::quick_sort_range::size"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>size</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::internal::quick_sort_range::grainsize"></a>
-const size_t </td><td class="memItemRight" valign="bottom"><b>grainsize</b> = 500</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::do_iteration_task::parallel_do_feeder_impl"></a>
+class </td><td class="memItemRight" valign="bottom"><b>parallel_do_feeder_impl</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename RandomAccessIterator, typename Compare><br>
- struct tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></h3>
+<h3>template<typename Body, typename Item><br>
+ class tbb::internal::do_iteration_task< Body, Item ></h3>
-Range used in quicksort to split elements into subranges based on a value.
+For internal use only.
<p>
-The split operation selects a splitter and places all elements less than or equal to the value in the first range and the remaining elements in the second range.
+Executes one iteration of a do.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00297.html">parallel_sort.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00214.html b/doc/html/a00214.html
index cb3e22f..15baa32 100644
--- a/doc/html/a00214.html
+++ b/doc/html/a00214.html
@@ -1,47 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::recursive_mutex Class Reference</title>
+<title>tbb::internal::do_task_iter< Iterator, Body, Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::recursive_mutex Class Reference</h1>Mutex that allows recursive mutex acquisition.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::do_task_iter< Iterator, Body, Item > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00303.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00093.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::do_task_iter< Iterator, Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00068.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::recursive_mutex::recursive_mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#a0">recursive_mutex</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::recursive_mutex::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::recursive_mutex::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = true</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::recursive_mutex::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::recursive_mutex::scoped_lock"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::do_task_iter::do_task_iter"></a>
+ </td><td class="memItemRight" valign="bottom"><b>do_task_iter</b> (Iterator first, Iterator last, <a class="el" href="a00232.html">feeder_type</a> &feeder)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Mutex that allows recursive mutex acquisition.
+<h3>template<typename Iterator, typename Body, typename Item><br>
+ class tbb::internal::do_task_iter< Iterator, Body, Item ></h3>
+
+For internal use only.
<p>
-Mutex that allows recursive mutex acquisition.
+Gets block of iterations and packages them into a do_group_task.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00215.html b/doc/html/a00215.html
index 775cf41..70efba9 100644
--- a/doc/html/a00215.html
+++ b/doc/html/a00215.html
@@ -1,85 +1,28 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::recursive_mutex::scoped_lock Class Reference</title>
+<title>tbb::empty_task Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::recursive_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::empty_task Class Reference</h1>task that does nothing. Useful for synchronization.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00303.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00349.html">task.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::recursive_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::empty_task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00123.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::recursive_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a0">scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a1">scoped_lock</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::recursive_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a2">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::recursive_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a3">acquire</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::recursive_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a4">try_acquire</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::recursive_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a5">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern.
+task that does nothing. Useful for synchronization.
<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a1" doxytag="tbb::recursive_mutex::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::recursive_mutex::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00214.html">recursive_mutex</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>mutex</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Acquire lock on given mutex.
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. </td>
- </tr>
-</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00349.html">task.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00216.html b/doc/html/a00216.html
index e9adc8c..1b1c954 100644
--- a/doc/html/a00216.html
+++ b/doc/html/a00216.html
@@ -1,41 +1,197 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::simple_partitioner Class Reference</title>
+<title>tbb::filter Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::simple_partitioner Class Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::filter Class Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>A simple partitioner
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A stage in a pipeline.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00299.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00342.html">pipeline.h</a>></code>
<p>
-<a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
+<p>
+Inheritance diagram for tbb::filter:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00096.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::simple_partitioner::internal::start_for"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#w4">mode</a> { <a class="el" href="a00216.html#w4w0">parallel</a> = current_version | filter_is_out_of_order,
+<a class="el" href="a00216.html#w4w1">serial_in_order</a> = current_version | filter_is_serial,
+<a class="el" href="a00216.html#w4w2">serial_out_of_order</a> = current_version | filter_is_serial | filter_is_out_of_order,
+<a class="el" href="a00216.html#w4w3">serial</a> = serial_in_order
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::filter::is_serial"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#a0">is_serial</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if filter is serial. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::filter::is_ordered"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_ordered</b> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::simple_partitioner::internal::start_reduce"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#a2">operator()</a> (void *item)=0</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::simple_partitioner::internal::start_scan"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Operate on an item from the input stream, and return item for output stream. <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#a3">~filter</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy filter. <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#a4">finalize</a> (void *)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys item if pipeline is cancelled. <a href="#a4"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::filter::filter"></a>
+ </td><td class="memItemRight" valign="bottom"><b>filter</b> (bool is_serial_)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b1" doxytag="tbb::filter::filter"></a>
+ </td><td class="memItemRight" valign="bottom"><b>filter</b> (<a class="el" href="a00216.html#w4">mode</a> filter_mode)</td></tr>
+
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::filter::internal::stage_task"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::filter::pipeline"></a>
+class </td><td class="memItemRight" valign="bottom"><b>pipeline</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-A simple partitioner
+A stage in a pipeline.
<p>
-Divides the range until the range is not divisible.
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="w4" doxytag="tbb::filter::mode"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="a00216.html#w4">tbb::filter::mode</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="w4w0" doxytag="parallel"></a>parallel</em> </td><td>
+processes multiple items in parallel and in no particular order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="w4w1" doxytag="serial_in_order"></a>serial_in_order</em> </td><td>
+processes items one at a time; all such filters process items in the same order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="w4w2" doxytag="serial_out_of_order"></a>serial_out_of_order</em> </td><td>
+processes items one at a time and in no particular order </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="w4w3" doxytag="serial"></a>serial</em> </td><td>
+<dl compact><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>use serial_in_order instead</dd></dl>
+</td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a3" doxytag="tbb::filter::~filter"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual __TBB_EXPORTED_METHOD tbb::filter::~<a class="el" href="a00216.html">filter</a> </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Destroy filter.
+<p>
+If the filter was added to a pipeline, the pipeline must be destroyed first. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a4" doxytag="tbb::filter::finalize"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual void tbb::filter::finalize </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Destroys item if pipeline is cancelled.
+<p>
+Required to prevent memory leaks Note it can be called concurrently even for serial filters. </td>
+ </tr>
+</table>
+<a class="anchor" name="a2" doxytag="tbb::filter::operator()"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual void* tbb::filter::operator() </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname1" valign="top" nowrap> <em>item</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [pure virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Operate on an item from the input stream, and return item for output stream.
+<p>
+Returns NULL if filter is a sink. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00299.html">partitioner.h</a></ul>
+<li><a class="el" href="a00342.html">pipeline.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00217.html b/doc/html/a00217.html
index 360db11..ca770cd 100644
--- a/doc/html/a00217.html
+++ b/doc/html/a00217.html
@@ -1,76 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::spin_mutex Class Reference</title>
+<title>tbb::final_scan_tag Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_mutex Class Reference</h1>A lock that occupies a single byte.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::final_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Used to indicate that the final scan is being performed.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00305.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-<a href="a00095.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00076.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#a0">spin_mutex</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock. <a href="#a0"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::spin_mutex::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::spin_mutex::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::spin_mutex::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::spin_mutex::scoped_lock"></a>
-class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::final_scan_tag::is_final_scan"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-A lock that occupies a single byte.
-<p>
-A <a class="el" href="a00217.html">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically <20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld.
+Used to indicate that the final scan is being performed.
<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::spin_mutex::spin_mutex"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::spin_mutex::spin_mutex </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Construct unacquired lock.
-<p>
-Equivalent to zero-initialization of *this. </td>
- </tr>
-</table>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00305.html">spin_mutex.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00218.html b/doc/html/a00218.html
index f0b6233..67f9671 100644
--- a/doc/html/a00218.html
+++ b/doc/html/a00218.html
@@ -1,53 +1,45 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::spin_mutex::scoped_lock Class Reference</title>
+<title>tbb::internal::final_sum< Range, Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_mutex::scoped_lock Class Reference</h1>Represents acquisition of a mutex.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::final_sum< Range, Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Performs final scan for a leaf.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00305.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::spin_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00096.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::final_sum< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::spin_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a0">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::final_sum::final_sum"></a>
+ </td><td class="memItemRight" valign="bottom"><b>final_sum</b> (Body &body_)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct without without acquiring a mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::spin_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a1">scoped_lock</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::final_sum::finish_construction"></a>
+void </td><td class="memItemRight" valign="bottom"><b>finish_construction</b> (const Range &range_, Body *stuff_last_)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct and acquire lock on a mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::spin_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a2">acquire</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::final_sum::body"></a>
+Body </td><td class="memItemRight" valign="bottom"><b>body</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a3">try_acquire</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::spin_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a4">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::spin_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a5">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Represents acquisition of a mutex.
+<h3>template<typename Range, typename Body><br>
+ class tbb::internal::final_sum< Range, Body ></h3>
+
+Performs final scan for a leaf.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00305.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00219.html b/doc/html/a00219.html
index edccf4c..f44e543 100644
--- a/doc/html/a00219.html
+++ b/doc/html/a00219.html
@@ -1,41 +1,38 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::spin_rw_mutex_v3 Class Reference</title>
+<title>tbb::internal::finish_reduce< Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_rw_mutex_v3 Class Reference</h1>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_reduce< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Task type use to combine the partial results of parallel_reduce.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00306.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00337.html">parallel_reduce.h</a>></code>
<p>
-<a href="a00097.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::finish_reduce< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00070.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::spin_rw_mutex_v3::spin_rw_mutex_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#a0">spin_rw_mutex_v3</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::spin_rw_mutex_v3::is_rw_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::spin_rw_mutex_v3::is_recursive_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::spin_rw_mutex_v3::is_fair_mutex"></a>
-const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::finish_reduce::start_reduce"></a>
+class </td><td class="memItemRight" valign="bottom"><b>start_reduce</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
+<h3>template<typename Body><br>
+ class tbb::internal::finish_reduce< Body ></h3>
+
+Task type use to combine the partial results of parallel_reduce.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00306.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00337.html">parallel_reduce.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00220.html b/doc/html/a00220.html
index db9e34a..689c0d2 100644
--- a/doc/html/a00220.html
+++ b/doc/html/a00220.html
@@ -1,159 +1,38 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</title>
+<title>tbb::internal::finish_reduce_with_affinity< Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</h1>The scoped locking pattern.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_reduce_with_affinity< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00306.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00337.html">parallel_reduce.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::finish_reduce_with_affinity< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00072.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a0">scoped_lock</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::finish_reduce_with_affinity::start_reduce_with_affinity"></a>
+class </td><td class="memItemRight" valign="bottom"><b>start_reduce_with_affinity</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a1">scoped_lock</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a2">~scoped_lock</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a3">acquire</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a4">upgrade_to_writer</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a5">release</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::downgrade_to_reader"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a6">downgrade_to_reader</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a7">try_acquire</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The scoped locking pattern.
-<p>
-It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
-<p>
-<hr><h2>Constructor & Destructor Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Construct lock that has not acquired a mutex.
-<p>
-Equivalent to zero-initialization of *this. </td>
- </tr>
-</table>
-<a class="anchor" name="a1" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00219.html">spin_rw_mutex</a> & </td>
- <td class="mdname" nowrap> <em>m</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>bool </td>
- <td class="mdname" nowrap> <em>write</em> = <code>true</code></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<h3>template<typename Body><br>
+ class tbb::internal::finish_reduce_with_affinity< Body ></h3>
+Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>.
<p>
-Acquire lock on given mutex.
-<p>
-Upon entry, *this should not be in the "have acquired a mutex" state. </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a4" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool tbb::spin_rw_mutex_v3::scoped_lock::upgrade_to_writer </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Upgrade reader to become a writer.
-<p>
-Returns true if the upgrade happened without re-acquiring the lock and false if opposite </td>
- </tr>
-</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00306.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00337.html">parallel_reduce.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00221.html b/doc/html/a00221.html
index d933a39..ce86ab3 100644
--- a/doc/html/a00221.html
+++ b/doc/html/a00221.html
@@ -1,31 +1,49 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::split Class Reference</title>
+<title>tbb::internal::finish_scan< Range, Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::split Class Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::finish_scan< Range, Body > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Dummy type that distinguishes splitting constructor from copy constructor.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Combine partial results.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00313.html">tbb_stddef.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-<table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::finish_scan< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00079.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::finish_scan::execute"></a>
+<a class="el" href="a00261.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#a0">execute</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::finish_scan::finish_scan"></a>
+ </td><td class="memItemRight" valign="bottom"><b>finish_scan</b> (<a class="el" href="a00260.html">sum_node_type</a> *&return_slot_, <a class="el" href="a00218.html">final_sum_type</a> **sum_, <a class="el" href="a00260.html">sum_node_type</a> &result_)</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::finish_scan::right_zombie"></a>
+<a class="el" href="a00218.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>right_zombie</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::finish_scan::result"></a>
+<a class="el" href="a00260.html">sum_node_type</a> & </td><td class="memItemRight" valign="bottom"><b>result</b></td></tr>
+
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Dummy type that distinguishes splitting constructor from copy constructor.
-<p>
-See description of parallel_for and parallel_reduce for example usages.
+<h3>template<typename Range, typename Body><br>
+ class tbb::internal::finish_scan< Range, Body ></h3>
+
+Combine partial results.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00313.html">tbb_stddef.h</a></ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00222.html b/doc/html/a00222.html
index 40a08cb..05457f2 100644
--- a/doc/html/a00222.html
+++ b/doc/html/a00222.html
@@ -1,38 +1,55 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::start_for< Range, Body, Partitioner > Class Template Reference</title>
+<title>tbb::internal::hash_map_base Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_for< Range, Body, Partitioner > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type used in parallel_for.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_base Class Reference</h1>base class of <a class="el" href="a00201.html">concurrent_hash_map</a>
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00294.html">parallel_for.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherited by <a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><code> [protected]</code>.
<p>
-Inheritance diagram for tbb::internal::start_for< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00062.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::hash_map_base:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00022.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_for::run"></a>
-void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, const Body &body, const Partitioner &partitioner)</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::hash_map_base::node_mutex_t"></a>
+typedef <a class="el" href="a00252.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>node_mutex_t</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::hash_map_base::chain_mutex_t"></a>
+typedef <a class="el" href="a00252.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>chain_mutex_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::hash_map_base::segment_mutex_t"></a>
+typedef <a class="el" href="a00252.html">spin_rw_mutex</a> </td><td class="memItemRight" valign="bottom"><b>segment_mutex_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::hash_map_base::hashcode_t"></a>
+typedef <a class="el" href="a00319.html#a2">internal::hashcode_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#w3">hashcode_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a hash code. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::internal::hash_map_base::n_segment_bits"></a>
+const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#s0">n_segment_bits</a> = 6</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Log2 of n_segment. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::internal::hash_map_base::n_segment"></a>
+const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#s1">n_segment</a> = size_t(1)<<<a class="el" href="a00222.html#s0">n_segment_bits</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Number of segments. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::internal::hash_map_base::max_physical_size"></a>
+const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#s2">max_physical_size</a> = size_t(1)<<(8*sizeof(<a class="el" href="a00222.html#w3">hashcode_t</a>)-<a class="el" href="a00222.html#s0">n_segment_bits</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum size of array of chains. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body, typename Partitioner><br>
- class tbb::internal::start_for< Range, Body, Partitioner ></h3>
-
-Task type used in parallel_for.
+base class of <a class="el" href="a00201.html">concurrent_hash_map</a>
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00294.html">parallel_for.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00223.html b/doc/html/a00223.html
index acd7449..52a7be9 100644
--- a/doc/html/a00223.html
+++ b/doc/html/a00223.html
@@ -1,42 +1,77 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::start_reduce< Range, Body, Partitioner > Class Template Reference</title>
+<title>tbb::internal::hash_map_iterator< Container, Value > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_reduce< Range, Body, Partitioner > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type used to split the work of parallel_reduce.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL */.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::start_reduce< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00064.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00024.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_reduce::run"></a>
-void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, const Partitioner &partitioner)</td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::hash_map_iterator::hash_map_iterator"></a>
+ </td><td class="memItemRight" valign="bottom"><b>hash_map_iterator</b> (const Container &table, size_t segment_index, size_t array_index=0, node *b=NULL)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::hash_map_iterator::hash_map_iterator"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#a1">hash_map_iterator</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct undefined iterator. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::hash_map_iterator::hash_map_iterator"></a>
+ </td><td class="memItemRight" valign="bottom"><b>hash_map_iterator</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::hash_map_iterator::operator *"></a>
+Value & </td><td class="memItemRight" valign="bottom"><b>operator *</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::hash_map_iterator::operator->"></a>
+Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::hash_map_iterator::operator++"></a>
+<a class="el" href="a00223.html">hash_map_iterator</a> & </td><td class="memItemRight" valign="bottom"><b>operator++</b> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::hash_map_iterator::operator++"></a>
+Value * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#a6">operator++</a> (int)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::start_reduce::finish_reduce"></a>
-class </td><td class="memItemRight" valign="bottom"><b>finish_reduce</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::hash_map_iterator::internal::hash_map_iterator"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_iterator</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::hash_map_iterator::internal::hash_map_range"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::hash_map_range</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::hash_map_iterator::tbb::concurrent_hash_map"></a>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#n2">tbb::concurrent_hash_map</a></td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n3" doxytag="tbb::internal::hash_map_iterator::operator=="></a>
+template<typename C, typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00223.html">hash_map_iterator</a>< C, U > &j)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n4" doxytag="tbb::internal::hash_map_iterator::operator!="></a>
+template<typename C, typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00223.html">hash_map_iterator</a>< C, U > &j)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n5" doxytag="tbb::internal::hash_map_iterator::operator-"></a>
+template<typename C, typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< C, T > &i, const <a class="el" href="a00223.html">hash_map_iterator</a>< C, U > &j)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body, typename Partitioner><br>
- class tbb::internal::start_reduce< Range, Body, Partitioner ></h3>
+<h3>template<typename Container, typename Value><br>
+ class tbb::internal::hash_map_iterator< Container, Value ></h3>
-Task type used to split the work of parallel_reduce.
+Meets requirements of a forward iterator for STL */.
+<p>
+Value is either the T or const T type of the container.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00224.html b/doc/html/a00224.html
index 70feef5..ea4f86e 100644
--- a/doc/html/a00224.html
+++ b/doc/html/a00224.html
@@ -1,42 +1,82 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::start_reduce_with_affinity< Range, Body > Class Template Reference</title>
+<title>tbb::internal::hash_map_range< Iterator > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_reduce_with_affinity< Range, Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::hash_map_range< Iterator > Class Template Reference</h1>Range class used with <a class="el" href="a00201.html">concurrent_hash_map</a>.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::start_reduce_with_affinity< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00066.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00025.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_reduce_with_affinity::run"></a>
-void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, <a class="el" href="a00162.html">affinity_partitioner</a> &partitioner)</td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::hash_map_range::size_type"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#w0">size_type</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for size of a range. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::hash_map_range::value_type"></a>
+typedef Iterator::value_type </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::hash_map_range::reference"></a>
+typedef Iterator::reference </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::hash_map_range::difference_type"></a>
+typedef Iterator::difference_type </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::internal::hash_map_range::iterator"></a>
+typedef Iterator </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::hash_map_range::empty"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#a0">empty</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range is empty. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::hash_map_range::is_divisible"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#a1">is_divisible</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">True if range can be partitioned into two subranges. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#a2">hash_map_range</a> (<a class="el" href="a00224.html">hash_map_range</a> &r, <a class="el" href="a00254.html">split</a>)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Split range. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a3" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
+template<typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#a3">hash_map_range</a> (<a class="el" href="a00224.html">hash_map_range</a>< U > &r)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">type conversion <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#a4">hash_map_range</a> (const Iterator &begin_, const Iterator &end_, <a class="el" href="a00224.html#w0">size_type</a> grainsize=1)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Init range with iterators and grainsize specified. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::hash_map_range::begin"></a>
+const Iterator & </td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::hash_map_range::end"></a>
+const Iterator & </td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::hash_map_range::grainsize"></a>
+<a class="el" href="a00224.html#w0">size_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#a7">grainsize</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The grain size for this range. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::start_reduce_with_affinity::finish_reduce_with_affinity"></a>
-class </td><td class="memItemRight" valign="bottom"><b>finish_reduce_with_affinity</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::hash_map_range::hash_map_range"></a>
+class </td><td class="memItemRight" valign="bottom"><b>hash_map_range</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body><br>
- class tbb::internal::start_reduce_with_affinity< Range, Body ></h3>
+<h3>template<typename Iterator><br>
+ class tbb::internal::hash_map_range< Iterator ></h3>
-Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+Range class used with <a class="el" href="a00201.html">concurrent_hash_map</a>.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00225.html b/doc/html/a00225.html
index 3834933..be106d2 100644
--- a/doc/html/a00225.html
+++ b/doc/html/a00225.html
@@ -1,45 +1,51 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::start_scan< Range, Body, Partitioner > Class Template Reference</title>
+<title>tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::start_scan< Range, Body, Partitioner > Class Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Initial task to split the work.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Auxiliary class for parallel_reduce; for internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00337.html">parallel_reduce.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::start_scan< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00072.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00074.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::start_scan::start_scan"></a>
- </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00227.html">sum_node_type</a> *&return_slot_, <a class="el" href="a00225.html">start_scan</a> &parent, <a class="el" href="a00227.html">sum_node_type</a> *parent_sum_)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::lambda_reduce_body::lambda_reduce_body"></a>
+ </td><td class="memItemRight" valign="bottom"><b>lambda_reduce_body</b> (const Value &identity, const RealBody &body, const Reduction &reduction)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::lambda_reduce_body::lambda_reduce_body"></a>
+ </td><td class="memItemRight" valign="bottom"><b>lambda_reduce_body</b> (const <a class="el" href="a00225.html">lambda_reduce_body</a> &other)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::lambda_reduce_body::lambda_reduce_body"></a>
+ </td><td class="memItemRight" valign="bottom"><b>lambda_reduce_body</b> (<a class="el" href="a00225.html">lambda_reduce_body</a> &other, <a class="el" href="a00254.html">tbb::split</a>)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::lambda_reduce_body::operator()"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (Range &range)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::start_scan::start_scan"></a>
- </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00227.html">sum_node_type</a> *&return_slot_, const Range &range_, <a class="el" href="a00191.html">final_sum_type</a> &body_, const Partitioner &partitioner_)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::lambda_reduce_body::join"></a>
+void </td><td class="memItemRight" valign="bottom"><b>join</b> (<a class="el" href="a00225.html">lambda_reduce_body</a> &rhs)</td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_scan::run"></a>
-void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, const Partitioner &partitioner)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::lambda_reduce_body::result"></a>
+Value </td><td class="memItemRight" valign="bottom"><b>result</b> () const </td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body, typename Partitioner = simple_partitioner><br>
- class tbb::internal::start_scan< Range, Body, Partitioner ></h3>
+<h3>template<typename Range, typename Value, typename RealBody, typename Reduction><br>
+ class tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></h3>
-Initial task to split the work.
+Auxiliary class for parallel_reduce; for internal use only.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00337.html">parallel_reduce.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00226.html b/doc/html/a00226.html
index acb6111..6d94371 100644
--- a/doc/html/a00226.html
+++ b/doc/html/a00226.html
@@ -1,33 +1,178 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::strip< T > Struct Template Reference</title>
+<title>tbb::movable_exception< ExceptionData > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::strip< T > Struct Template Reference</h1>Strips its template type argument from 'cv' and '&' qualifiers.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::movable_exception< ExceptionData > Class Template Reference</h1>Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00353.html">tbb_exception.h</a>></code>
<p>
-<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00268.html">tbb::tbb_exception</a>.
+<p>
+Inheritance diagram for tbb::movable_exception< ExceptionData >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00134.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::strip::type"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::movable_exception::movable_exception"></a>
+ </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const ExceptionData &data)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::movable_exception::movable_exception"></a>
+ </td><td class="memItemRight" valign="bottom"><b>movable_exception</b> (const <a class="el" href="a00226.html">movable_exception</a> &src) throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::movable_exception::operator="></a>
+const <a class="el" href="a00226.html">movable_exception</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="a00226.html">movable_exception</a> &src)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::movable_exception::data"></a>
+ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::movable_exception::data"></a>
+const ExceptionData & </td><td class="memItemRight" valign="bottom"><b>data</b> () const throw ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::movable_exception::name"></a>
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#a6">name</a> () const throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::movable_exception::what"></a>
+const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#a7">what</a> () const throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00226.html#a7">what()</a> method. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00226.html">movable_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#a8">move</a> () throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object. <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#a9">destroy</a> () throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00226.html#a8">move()</a> method. <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#a10">throw_self</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object. <a href="#a10"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="p0" doxytag="tbb::movable_exception::my_exception_data"></a>
+ExceptionData </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#p0">my_exception_data</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">User data. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- struct tbb::internal::strip< T ></h3>
+<h3>template<typename ExceptionData><br>
+ class tbb::movable_exception< ExceptionData ></h3>
+
+Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread.
+<p>
+Code using TBB can instantiate this template with an arbitrary ExceptionData type and throw this exception object. Such exceptions are intercepted by the TBB scheduler and delivered to the root thread (). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a00268.html">tbb::tbb_exception</a> * </dd></dl>
+
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a9" doxytag="tbb::movable_exception::destroy"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename ExceptionData> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00226.html">tbb::movable_exception</a>< ExceptionData >::destroy </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [inline, virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
-Strips its template type argument from 'cv' and '&' qualifiers.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+Destroys objects created by the <a class="el" href="a00226.html#a8">move()</a> method.
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. *
+<p>
+Implements <a class="el" href="a00268.html#a1">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a8" doxytag="tbb::movable_exception::move"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename ExceptionData> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"><a class="el" href="a00226.html">movable_exception</a>* <a class="el" href="a00226.html">tbb::movable_exception</a>< ExceptionData >::move </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [inline, virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Creates and returns pointer to the deep copy of this exception object.
+<p>
+Move semantics is allowed. *
+<p>
+Implements <a class="el" href="a00268.html#a0">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a10" doxytag="tbb::movable_exception::throw_self"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename ExceptionData> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00226.html">tbb::movable_exception</a>< ExceptionData >::throw_self </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline, virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Throws this exception object.
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. *
+<p>
+Implements <a class="el" href="a00268.html#a2">tbb::tbb_exception</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00353.html">tbb_exception.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00227.html b/doc/html/a00227.html
index 75c7a73..b9c9bd7 100644
--- a/doc/html/a00227.html
+++ b/doc/html/a00227.html
@@ -1,51 +1,47 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::sum_node< Range, Body > Class Template Reference</title>
+<title>tbb::mutex Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::sum_node< Range, Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Split work to be done in the scan.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::mutex Class Reference</h1>Wrapper around the platform's native reader-writer lock.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00332.html">mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::sum_node< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00070.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00047.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::sum_node::incoming"></a>
-<a class="el" href="a00191.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>incoming</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::mutex::mutex"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#a0">mutex</a> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::sum_node::body"></a>
-<a class="el" href="a00191.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>body</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::mutex::is_rw_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="tbb::internal::sum_node::stuff_last"></a>
-Body * </td><td class="memItemRight" valign="bottom"><b>stuff_last</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::mutex::is_recursive_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::sum_node::start_scan"></a>
-class </td><td class="memItemRight" valign="bottom"><b>start_scan</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::mutex::is_fair_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = false</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::sum_node::finish_scan"></a>
-class </td><td class="memItemRight" valign="bottom"><b>finish_scan</b></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::mutex::scoped_lock"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Range, typename Body><br>
- class tbb::internal::sum_node< Range, Body ></h3>
-
-Split work to be done in the scan.
+Wrapper around the platform's native reader-writer lock.
+<p>
+For testing purposes only.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00332.html">mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00228.html b/doc/html/a00228.html
index 09a33aa..bcb6582 100644
--- a/doc/html/a00228.html
+++ b/doc/html/a00228.html
@@ -1,671 +1,60 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::task Class Reference</title>
+<title>tbb::mutex::scoped_lock Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task Class Reference</h1>Base class for user-defined tasks.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00332.html">mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inherited by <a class="el" href="a00188.html">tbb::empty_task</a>, <a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>, tbb::internal::do_group_task_input< Body, Item >, <a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a>, tbb::internal::do_iteration_task_iter< Iterator, Body, Item >, <a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>, <a class [...]
-<p>
-Inheritance diagram for tbb::task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00105.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00048.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a14">internal::intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w0">depth_type</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A scheduling depth. <a href="#w0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a12">internal::affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w1">affinity_id</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity. <a href="#w1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w8">state_type</a> { <br>
- <a class="el" href="a00228.html#w8w2">executing</a>,
-<a class="el" href="a00228.html#w8w3">reexecute</a>,
-<a class="el" href="a00228.html#w8w4">ready</a>,
-<a class="el" href="a00228.html#w8w5">allocated</a>,
-<br>
- <a class="el" href="a00228.html#w8w6">freed</a>,
-<a class="el" href="a00228.html#w8w7">recycle</a>
-<br>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration of task states that the scheduler considers. <a href="#w8">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::task::~task"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a0">~task</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::task::execute"></a>
-virtual <a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a1">execute</a> ()=0</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_continuation_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a2">allocate_continuation</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a continuation task of *this. <a href="#a2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task::allocate_child"></a>
-internal::allocate_child_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a3">allocate_child</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a child task of *this. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_additional_child_of_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a4">allocate_additional_child_of</a> (<a class="el" href="a00228.html">task</a> &t)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Like allocate_child, except that task's parent becomes "t", not this. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a5">destroy</a> (<a class="el" href="a00228.html">task</a> &victim)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task. <a href="#a5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a6">recycle_as_continuation</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Change this to be a continuation of its former self. <a href="#a6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Recommended to use, safe variant of recycle_as_continuation. <a href="#a7"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::task::recycle_as_child_of"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a8">recycle_as_child_of</a> (<a class="el" href="a00228.html">task</a> &new_parent)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Change this to be a child of new_parent. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a9">recycle_to_reexecute</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00228.html#a1">execute()</a> returns. <a href="#a9"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::task::depth"></a>
-<a class="el" href="a00228.html#w0">depth_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a10">depth</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Scheduling depth. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a11">set_depth</a> (<a class="el" href="a00228.html#w0">depth_type</a> new_depth)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set scheduling depth to given value. <a href="#a11"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a12">add_to_depth</a> (int delta)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Change scheduling depth by given amount. <a href="#a12"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::task::set_ref_count"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a13">set_ref_count</a> (int count)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set reference count. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a14">spawn</a> (<a class="el" href="a00228.html">task</a> &child)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule task for execution when a worker becomes available. <a href="#a14"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a15">spawn</a> (<a class="el" href="a00229.html">task_list</a> &list)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn multiple tasks and clear list. <a href="#a15"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::task::spawn_and_wait_for_all"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a> (<a class="el" href="a00228.html">task</a> &child)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::task::spawn_and_wait_for_all"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a> (<a class="el" href="a00229.html">task_list</a> &list)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a18">wait_for_all</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait for reference count to become one, and set reference count to zero. <a href="#a18"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::task::parent"></a>
-<a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a19">parent</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task on whose behalf this task is working, or NULL if this is a root. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a20" doxytag="tbb::task::is_stolen_task"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a20">is_stolen_task</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if task is owned by different thread than thread that owns its parent. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a21" doxytag="tbb::task::state"></a>
-<a class="el" href="a00228.html#w8">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a21">state</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Current execution state. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a22" doxytag="tbb::task::ref_count"></a>
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a22">ref_count</a> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::mutex::scoped_lock::scoped_lock"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a0">scoped_lock</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The internal reference count. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a23" doxytag="tbb::task::is_owned_by_current_thread"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a1">scoped_lock</a> (<a class="el" href="a00227.html">mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if this task is owned by the calling thread; false otherwise. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a24" doxytag="tbb::task::set_affinity"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a24">set_affinity</a> (<a class="el" href="a00228.html#w1">affinity_id</a> id)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::mutex::scoped_lock::~scoped_lock"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a2">~scoped_lock</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set affinity for this task. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a25" doxytag="tbb::task::affinity"></a>
-<a class="el" href="a00228.html#w1">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a25">affinity</a> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::mutex::scoped_lock::acquire"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a3">acquire</a> (<a class="el" href="a00227.html">mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Current affinity of this task. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a26">note_affinity</a> (<a class="el" href="a00228.html#w1">affinity_id</a> id)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::mutex::scoped_lock::try_acquire"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a4">try_acquire</a> (<a class="el" href="a00227.html">mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoked by scheduler to notify task that it ran on unexpected thread. <a href="#a26"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::task::allocate_root"></a>
-internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e0">allocate_root</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e1">spawn_root_and_wait</a> (<a class="el" href="a00228.html">task</a> &root)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. <a href="#e1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e2">spawn_root_and_wait</a> (<a class="el" href="a00229.html">task_list</a> &root_list)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish. <a href="#e2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3" doxytag="tbb::task::self"></a>
-<a class="el" href="a00228.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e3">self</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00228.html#b0">task()</a> currently being run by this thread. <br></td></tr>
-<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::task::task"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#b0">task</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::task::task_list"></a>
-class </td><td class="memItemRight" valign="bottom"><b>task_list</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::task::internal::scheduler"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::scheduler</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::task::internal::allocate_root_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::task::internal::allocate_continuation_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_continuation_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::task::internal::allocate_child_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_child_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::task::internal::allocate_additional_child_of_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::mutex::scoped_lock::release"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a5">release</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Base class for user-defined tasks.
-<p>
-<hr><h2>Member Typedef Documentation</h2>
-<a class="anchor" name="w1" doxytag="tbb::task::affinity_id"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a12">internal::affinity_id</a> <a class="el" href="a00228.html#w1">tbb::task::affinity_id</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-An id as used for specifying affinity.
-<p>
-Guaranteed to be integral type. Value of 0 means no affinity. </td>
- </tr>
-</table>
-<a class="anchor" name="w0" doxytag="tbb::task::depth_type"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a14">internal::intptr</a> <a class="el" href="a00228.html#w0">tbb::task::depth_type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-A scheduling depth.
-<p>
-Guaranteed to be a signed integral type. </td>
- </tr>
-</table>
-<hr><h2>Member Enumeration Documentation</h2>
-<a class="anchor" name="w8" doxytag="tbb::task::state_type"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="a00228.html#w8">tbb::task::state_type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Enumeration of task states that the scheduler considers.
-<p>
-<dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="w8w2" doxytag="executing"></a>executing</em> </td><td>
-task is running, and will be destroyed after method <a class="el" href="a00228.html#a1">execute()</a> completes. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="w8w3" doxytag="reexecute"></a>reexecute</em> </td><td>
-task to be rescheduled. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="w8w4" doxytag="ready"></a>ready</em> </td><td>
-task is in ready pool, or is going to be put there, or was just taken off. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="w8w5" doxytag="allocated"></a>allocated</em> </td><td>
-task object is freshly allocated or recycled. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="w8w6" doxytag="freed"></a>freed</em> </td><td>
-task object is on free list, or is going to be put there, or was just taken off. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="w8w7" doxytag="recycle"></a>recycle</em> </td><td>
-task to be recycled as continuation </td></tr>
-</table>
-</dl>
- </td>
- </tr>
-</table>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="a12" doxytag="tbb::task::add_to_depth"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::add_to_depth </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>delta</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Change scheduling depth by given amount.
-<p>
-The resulting depth must be non-negative. </td>
- </tr>
-</table>
-<a class="anchor" name="a4" doxytag="tbb::task::allocate_additional_child_of"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">internal::allocate_additional_child_of_proxy tbb::task::allocate_additional_child_of </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>t</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Like allocate_child, except that task's parent becomes "t", not this.
-<p>
-Typically used in conjunction with schedule_to_reexecute to implement while loops. Atomically increments the reference count of t.parent() </td>
- </tr>
-</table>
-<a class="anchor" name="a2" doxytag="tbb::task::allocate_continuation"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">internal::allocate_continuation_proxy& tbb::task::allocate_continuation </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Returns proxy for overloaded new that allocates a continuation task of *this.
-<p>
-The continuation's parent becomes the parent of *this. </td>
- </tr>
-</table>
-<a class="anchor" name="a5" doxytag="tbb::task::destroy"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::destroy </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>victim</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Destroy a task.
-<p>
-Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00228.html#a1">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all. </td>
- </tr>
-</table>
-<a class="anchor" name="a26" doxytag="tbb::task::note_affinity"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">virtual void tbb::task::note_affinity </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html#w1">affinity_id</a> </td>
- <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Invoked by scheduler to notify task that it ran on unexpected thread.
-<p>
-Invoked before method <a class="el" href="a00228.html#a1">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
-The default action does nothing. </td>
- </tr>
-</table>
-<a class="anchor" name="a6" doxytag="tbb::task::recycle_as_continuation"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::recycle_as_continuation </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Change this to be a continuation of its former self.
-<p>
-The caller must guarantee that the task's refcount does not become zero until after the method <a class="el" href="a00228.html#a1">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00228.html#a1">execute()</a> return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.<p>
-Because of the hazard, this method may be deprecated in the future. </td>
- </tr>
-</table>
-<a class="anchor" name="a7" doxytag="tbb::task::recycle_as_safe_continuation"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::recycle_as_safe_continuation </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Recommended to use, safe variant of recycle_as_continuation.
-<p>
-For safety, it requires additional increment of ref_count. </td>
- </tr>
-</table>
-<a class="anchor" name="a9" doxytag="tbb::task::recycle_to_reexecute"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::recycle_to_reexecute </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Schedule this for reexecution after current <a class="el" href="a00228.html#a1">execute()</a> returns.
-<p>
-Requires that this.execute() be running. </td>
- </tr>
-</table>
-<a class="anchor" name="a11" doxytag="tbb::task::set_depth"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::set_depth </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html#w0">depth_type</a> </td>
- <td class="mdname1" valign="top" nowrap> <em>new_depth</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Set scheduling depth to given value.
-<p>
-The depth must be non-negative </td>
- </tr>
-</table>
-<a class="anchor" name="a15" doxytag="tbb::task::spawn"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::spawn </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00229.html">task_list</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>list</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Spawn multiple tasks and clear list.
-<p>
-All of the tasks must be at the same depth. </td>
- </tr>
-</table>
-<a class="anchor" name="a14" doxytag="tbb::task::spawn"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::spawn </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>child</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Schedule task for execution when a worker becomes available.
-<p>
-After all children spawned so far finish their method <a class="el" href="a00228.html#a1">task::execute</a>, their parent's method <a class="el" href="a00228.html#a1">task::execute</a> may start running. Therefore, it is important to ensure that at least one child has not completed until the parent is ready to run. </td>
- </tr>
-</table>
-<a class="anchor" name="e2" doxytag="tbb::task::spawn_root_and_wait"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::spawn_root_and_wait </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00229.html">task_list</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>root_list</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline, static]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
+The scoped locking pattern.
<p>
-Spawn root tasks on list and wait for all of them to finish.
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
<p>
-If there are more tasks than worker threads, the tasks are spawned in order of front to back. </td>
- </tr>
-</table>
-<a class="anchor" name="e1" doxytag="tbb::task::spawn_root_and_wait"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task::spawn_root_and_wait </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>root</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [inline, static]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.
-<p>
-The thread that calls spawn_root_and_wait must be the same thread that allocated the task. </td>
- </tr>
-</table>
-<a class="anchor" name="a18" doxytag="tbb::task::wait_for_all"></a><p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a1" doxytag="tbb::mutex::scoped_lock::scoped_lock"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void tbb::task::wait_for_all </td>
+ <td class="md" nowrap valign="top">tbb::mutex::scoped_lock::scoped_lock </td>
<td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00227.html">mutex</a> & </td>
+ <td class="mdname1" valign="top" nowrap> <em>mutex</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
</tr>
@@ -681,16 +70,16 @@ The thread that calls spawn_root_and_wait must be the same thread that allocated
<td>
<p>
-Wait for reference count to become one, and set reference count to zero.
+Acquire lock on given mutex.
<p>
-Works on tasks while waiting. </td>
+Upon entry, *this should not be in the "have acquired a mutex" state. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00332.html">mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00229.html b/doc/html/a00229.html
index 55544ac..ce0dfd8 100644
--- a/doc/html/a00229.html
+++ b/doc/html/a00229.html
@@ -1,59 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::task_list Class Reference</title>
+<title>tbb::internal::no_assign Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task_list Class Reference</h1>A list of children.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::no_assign Class Reference</h1>Base class for types that should not be assigned.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00356.html">tbb_stddef.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherited by tbb::internal::allocate_additional_child_of_proxy<code> [private]</code>, tbb::internal::allocate_child_proxy<code> [private]</code>, tbb::internal::allocate_continuation_proxy<code> [private]</code>, tbb::internal::allocate_root_proxy<code> [private]</code>, tbb::internal::allocate_root_with_context_proxy<code> [private]</code>, <a class="el" href="a00230.html">tbb::internal::no_copy</a><code> [private]</code>, <a class="el" href="a00243.html">tbb::internal::quick_sort_pret [...]
<p>
-Inheritance diagram for tbb::task_list:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00107.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::no_assign:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00144.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::task_list::task_list"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a0">task_list</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty list. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::task_list::~task_list"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a1">~task_list</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys the list, but does not destroy the task objects. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::task_list::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a2">empty</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">True if list if empty; false otherwise. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task_list::push_back"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a3">push_back</a> (<a class="el" href="a00228.html">task</a> &<a class="el" href="a00228.html">task</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Push task onto back of list. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::task_list::pop_front"></a>
-<a class="el" href="a00228.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a4">pop_front</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pop the front task from the list. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::task_list::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a5">clear</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear the list. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::task_list::task"></a>
-class </td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::no_assign::no_assign"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a0">no_assign</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Explicitly define default construction, because otherwise gcc issues gratuitous warning. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-A list of children.
-<p>
-Used for method task::spawn_children
+Base class for types that should not be assigned.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00356.html">tbb_stddef.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00230.html b/doc/html/a00230.html
index f7084c5..6faf4f4 100644
--- a/doc/html/a00230.html
+++ b/doc/html/a00230.html
@@ -1,50 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::task_prefix Class Reference</title>
+<title>tbb::internal::no_copy Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::task_prefix Class Reference</h1>Memory prefix to a task object.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::no_copy Class Reference</h1>Base class for types that should not be copied or assigned.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00356.html">tbb_stddef.h</a>></code>
<p>
-<a href="a00104.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00229.html">tbb::internal::no_assign</a>.
+<p>
+Inherited by tbb::concurrent_hash_map< Key, T, HashCompare, A >::node, tbb::concurrent_queue< T, A >::destroyer<code> [private]</code>, tbb::concurrent_vector< T, A >::internal_loop_guide<code> [private]</code>, <a class="el" href="a00216.html">tbb::filter</a><code> [private]</code>, tbb::internal::affinity_partition_type, <a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a><code> [private]</code>, <a class="el" href="a00205.html">tbb::intern [...]
+<p>
+Inheritance diagram for tbb::internal::no_copy:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00145.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::task_prefix::tbb::task"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#n0">tbb::task</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::task_prefix::tbb::task_list"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#n1">tbb::task_list</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::task_prefix::internal::scheduler"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::scheduler</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::internal::task_prefix::internal::allocate_root_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::internal::task_prefix::internal::allocate_child_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_child_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::internal::task_prefix::internal::allocate_continuation_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_continuation_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n6" doxytag="tbb::internal::task_prefix::internal::allocate_additional_child_of_proxy"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::no_copy::no_copy"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#a0">no_copy</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allow default construction. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Memory prefix to a task object.
-<p>
-This class is internal to the library. Do not reference it directly, except within the library itself. Fields are ordered in way that preserves backwards compatibility and yields good packing on typical 32-bit and 64-bit platforms.
+Base class for types that should not be copied or assigned.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00356.html">tbb_stddef.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00231.html b/doc/html/a00231.html
index 111fb80..a6a1d75 100644
--- a/doc/html/a00231.html
+++ b/doc/html/a00231.html
@@ -1,163 +1,49 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::task_scheduler_init Class Reference</title>
+<title>tbb::parallel_do_feeder< Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::task_scheduler_init Class Reference</h1>Class representing reference to tbb scheduler.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::parallel_do_feeder< Item > Class Template Reference</h1>Class the user supplied algorithm body uses to add new tasks
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00308.html">task_scheduler_init.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::task_scheduler_init:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00108.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by <a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>.
+<p>
+Inheritance diagram for tbb::parallel_do_feeder< Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00061.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a0">initialize</a> (int number_of_threads=<a class="el" href="a00231.html#s0">automatic</a>)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a1">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter. <a href="#a1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::task_scheduler_init::terminate"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a2">terminate</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Inverse of method initialize. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task_scheduler_init::task_scheduler_init"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a3">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00231.html#s0">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to intialize(number_of_threads). <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::task_scheduler_init::~task_scheduler_init"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a4">~task_scheduler_init</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::parallel_do_feeder::add"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a0">add</a> (const Item &item)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#e0">default_num_threads</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item to a running parallel_do. <br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::parallel_do_feeder::internal::parallel_do_feeder_impl"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::parallel_do_feeder_impl</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of threads tbb scheduler would create if initialized by default. <a href="#e0"></a><br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::task_scheduler_init::automatic"></a>
-const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#s0">automatic</a> = -1</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for number of threads that is automatic. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::task_scheduler_init::deferred"></a>
-const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#s1">deferred</a> = -2</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00231.html#a0">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Class representing reference to tbb scheduler.
-<p>
-A thread must construct a <a class="el" href="a00231.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task.
-<p>
-<hr><h2>Member Function Documentation</h2>
-<a class="anchor" name="e0" doxytag="tbb::task_scheduler_init::default_num_threads"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int tbb::task_scheduler_init::default_num_threads </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [static]</code></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<h3>template<typename Item><br>
+ class tbb::parallel_do_feeder< Item ></h3>
+Class the user supplied algorithm body uses to add new tasks
<p>
-Returns the number of threads tbb scheduler would create if initialized by default.
-<p>
-Result returned by this method does not depend on whether the scheduler has already been initialized.<p>
-Because tbb 2.0 does not support blocking tasks yet, you may use this method to boost the number of threads in the tbb's internal pool, if your tasks are doing I/O operations. The optimal number of additional threads depends on how much time your tasks spend in the blocked state. </td>
- </tr>
-</table>
-<a class="anchor" name="a1" doxytag="tbb::task_scheduler_init::initialize"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task_scheduler_init::initialize </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname" nowrap> <em>number_of_threads</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>stack_size_type </td>
- <td class="mdname" nowrap> <em>thread_stack_size</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-The overloaded method with stack size parameter.
-<p>
-Overloading is necessary to preserve ABI compatibility </td>
- </tr>
-</table>
-<a class="anchor" name="a0" doxytag="tbb::task_scheduler_init::initialize"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void tbb::task_scheduler_init::initialize </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>number_of_threads</em> = <code><a class="el" href="a00231.html#s0">automatic</a></code> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>Item</em> </td><td>Work item type * </td></tr>
+ </table>
+</dl>
<p>
-Ensure that scheduler exists for this thread.
-<p>
-A value of -1 lets tbb decide on the number of threads, which is typically the number of hardware threads. For production code, the default value of -1 should be used, particularly if the client code is mixed with third party clients that might also use tbb.<p>
-The number_of_threads is ignored if any other task_scheduler_inits currently exist. A thread may construct multiple task_scheduler_inits. Doing so does no harm because the underlying scheduler is reference counted. </td>
- </tr>
-</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00308.html">task_scheduler_init.h</a></ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00232.html b/doc/html/a00232.html
index 0a9b0cc..95eb2bb 100644
--- a/doc/html/a00232.html
+++ b/doc/html/a00232.html
@@ -1,97 +1,47 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::tbb_allocator< T > Class Template Reference</title>
+<title>tbb::internal::parallel_do_feeder_impl< Body, Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::parallel_do_feeder_impl< Body, Item > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00310.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00110.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00231.html">tbb::parallel_do_feeder< Item >< Item ></a>.
+<p>
+Inheritance diagram for tbb::internal::parallel_do_feeder_impl< Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00065.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::tbb_allocator::pointer"></a>
-typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::tbb_allocator::const_pointer"></a>
-typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::tbb_allocator::reference"></a>
-typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::tbb_allocator::const_reference"></a>
-typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::tbb_allocator::value_type"></a>
-typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::tbb_allocator::size_type"></a>
-typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::tbb_allocator::difference_type"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#w9">malloc_type</a> { <b>scalable</b>,
-<b>standard</b>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies current allocator. <br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::tbb_allocator::tbb_allocator"></a>
- </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00232.html">tbb_allocator</a> &) throw ()</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::tbb_allocator::tbb_allocator"></a>
-template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00232.html">tbb_allocator</a>< U > &) throw ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::tbb_allocator::address"></a>
-pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::tbb_allocator::address"></a>
-const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::tbb_allocator::allocate"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a5">allocate</a> (size_type n, const void *=0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::tbb_allocator::deallocate"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::tbb_allocator::max_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a7">max_size</a> () const throw ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::tbb_allocator::construct"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a8">construct</a> (pointer p, const T &value)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::parallel_do_feeder_impl::parallel_do_feeder_impl"></a>
+ </td><td class="memItemRight" valign="bottom"><b>parallel_do_feeder_impl</b> (<a class="el" href="a00262.html">tbb::task_group_context</a> &context)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::tbb_allocator::destroy"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a9">destroy</a> (pointer p)</td></tr>
+<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::parallel_do_feeder_impl::my_body"></a>
+const Body * </td><td class="memItemRight" valign="bottom"><b>my_body</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::tbb_allocator::allocator_type"></a>
-<a class="el" href="a00232.html#w9">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#e0">allocator_type</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::parallel_do_feeder_impl::my_barrier"></a>
+<a class="el" href="a00215.html">empty_task</a> * </td><td class="memItemRight" valign="bottom"><b>my_barrier</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- class tbb::tbb_allocator< T ></h3>
+<h3>template<class Body, typename Item><br>
+ class tbb::internal::parallel_do_feeder_impl< Body, Item ></h3>
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+For internal use only.
<p>
-The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.
+Implements new task adding procedure.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00310.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00233.html b/doc/html/a00233.html
index 535d1d5..14a68a7 100644
--- a/doc/html/a00233.html
+++ b/doc/html/a00233.html
@@ -1,39 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::tbb_allocator< void > Class Template Reference</title>
+<title>tbb::internal::parallel_do_operator_selector< Body, Item > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::parallel_do_operator_selector< Body, Item > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00310.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00112.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00062.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::tbb_allocator< void >::pointer"></a>
-typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::tbb_allocator< void >::const_pointer"></a>
-typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::tbb_allocator< void >::value_type"></a>
-typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="e0" doxytag="tbb::internal::parallel_do_operator_selector::call"></a>
+template<typename A1, typename A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>call</b> (const Body &obj, A1 &arg1, A2 &arg2)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<><br>
- class tbb::tbb_allocator< void ></h3>
+<h3>template<class Body, typename Item><br>
+ class tbb::internal::parallel_do_operator_selector< Body, Item ></h3>
-Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
+For internal use only.
+<p>
+Selects one of the two possible forms of function call member operator.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00310.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00234.html b/doc/html/a00234.html
index 2ab1f9b..1770e43 100644
--- a/doc/html/a00234.html
+++ b/doc/html/a00234.html
@@ -1,79 +1,144 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::tbb_thread_v3 Class Reference</title>
+<title>tbb::parallel_while< Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::tbb_thread_v3 Class Reference</h1>Versioned thread class.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::parallel_while< Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Parallel iteration over a stream, with optional addition of more work.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00314.html">tbb_thread.h</a>></code>
+<code>#include <<a class="el" href="a00340.html">parallel_while.h</a>></code>
<p>
-<a href="a00128.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
+<p>
+Inheritance diagram for tbb::parallel_while< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00087.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::tbb_thread_v3::native_handle_type"></a>
-typedef pthread_t </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::parallel_while::value_type"></a>
+typedef Body::argument_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#w0">value_type</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of items. <br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a0">tbb_thread_v3</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a thread object that does not represent a thread of execution. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a1" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
-template<class F> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a1">tbb_thread_v3</a> (F f)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f() in a new thread. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
-template<class F, class X> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a2">tbb_thread_v3</a> (F f, X x)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x) in a new thread. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a3" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
-template<class F, class X, class Y> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a3">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x,y) in a new thread. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::tbb_thread_v3::joinable"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>joinable</b> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::parallel_while::parallel_while"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a0">parallel_while</a> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::tbb_thread_v3::join"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a5">join</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty non-running parallel while. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::parallel_while::~parallel_while"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a1">~parallel_while</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The completion of the thread represented by *this happens before <a class="el" href="a00234.html#a5">join()</a> returns. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::tbb_thread_v3::detach"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a6">detach</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor cleans up data members before returning. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename Stream> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a2">run</a> (Stream &stream, const Body &body)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">When <a class="el" href="a00234.html#a6">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::tbb_thread_v3::get_id"></a>
-id </td><td class="memItemRight" valign="bottom"><b>get_id</b> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply body.apply to each item in the stream. <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a3">add</a> (const <a class="el" href="a00234.html#w0">value_type</a> &item)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::tbb_thread_v3::native_handle"></a>
-native_handle_type </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
-
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::tbb_thread_v3::hardware_concurrency"></a>
-unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#e0">hardware_concurrency</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The number of hardware thread contexts. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::tbb_thread_v3::move_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a work item while running. <a href="#a3"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename Body><br>
+ class tbb::parallel_while< Body ></h3>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::tbb_thread_v3::tbb::swap"></a>
-void </td><td class="memItemRight" valign="bottom"><b>tbb::swap</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
+Parallel iteration over a stream, with optional addition of more work.
+<p>
+The Body b has the requirement: <br>
+ "b(v)" <br>
+ "b.argument_type" <br>
+ where v is an argument_type
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a3" doxytag="tbb::parallel_while::add"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Body> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00234.html">tbb::parallel_while</a>< Body >::add </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a00234.html#w0">value_type</a> & </td>
+ <td class="mdname1" valign="top" nowrap> <em>item</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+<p>
+Add a work item while running.
+<p>
+Should be executed only by body.apply or a thread spawned therefrom. </td>
+ </tr>
</table>
-<hr><a name="_details"></a><h2>Detailed Description</h2>
-Versioned thread class.
+<a class="anchor" name="a2" doxytag="tbb::parallel_while::run"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template<typename Body> </td>
+ </tr>
+ <tr>
+ <td class="md" colspan="4">
+template<typename Stream> </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top">void <a class="el" href="a00234.html">tbb::parallel_while</a>< Body >::run </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">Stream & </td>
+ <td class="mdname" nowrap> <em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const Body & </td>
+ <td class="mdname" nowrap> <em>body</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
<p>
+Apply body.apply to each item in the stream.
+<p>
+A Stream s has the requirements <br>
+ "S::value_type" <br>
+ "s.pop_if_present(value) is convertible to bool </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00314.html">tbb_thread.h</a></ul>
+<li><a class="el" href="a00340.html">parallel_while.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00235.html b/doc/html/a00235.html
index 81f50ca..c4fbd7e 100644
--- a/doc/html/a00235.html
+++ b/doc/html/a00235.html
@@ -1,45 +1,44 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::thread_closure_1< F, X > Struct Template Reference</title>
+<title>tbb::internal::partition_type_base Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::thread_closure_1< F, X > Struct Template Reference</h1>Structure used to pass user function with 1 argument to thread.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::partition_type_base Class Reference</h1>Provides default methods for partition objects without affinity.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00314.html">tbb_thread.h</a>></code>
+<code>#include <<a class="el" href="a00341.html">partitioner.h</a>></code>
<p>
-<a href="a00126.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherited by tbb::auto_partitioner::partition_type, and tbb::simple_partitioner::partition_type.
+<p>
+Inheritance diagram for tbb::internal::partition_type_base:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00089.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::thread_closure_1::thread_closure_1"></a>
- </td><td class="memItemRight" valign="bottom"><b>thread_closure_1</b> (const F &f, const X &x)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::partition_type_base::set_affinity"></a>
+void </td><td class="memItemRight" valign="bottom"><b>set_affinity</b> (<a class="el" href="a00261.html">task</a> &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::partition_type_base::note_affinity"></a>
+void </td><td class="memItemRight" valign="bottom"><b>note_affinity</b> (<a class="el" href="a00261.html#w1">task::affinity_id</a>)</td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::thread_closure_1::start_routine"></a>
-__TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#e0">start_routine</a> (void *c)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::partition_type_base::continue_after_execute_range"></a>
+<a class="el" href="a00261.html">task</a> * </td><td class="memItemRight" valign="bottom"><b>continue_after_execute_range</b> (<a class="el" href="a00261.html">task</a> &)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::thread_closure_1::function"></a>
-F </td><td class="memItemRight" valign="bottom"><b>function</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::partition_type_base::decide_whether_to_delay"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>decide_whether_to_delay</b> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::thread_closure_1::arg1"></a>
-X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::partition_type_base::spawn_or_delay"></a>
+void </td><td class="memItemRight" valign="bottom"><b>spawn_or_delay</b> (bool, <a class="el" href="a00261.html">task</a> &a, <a class="el" href="a00261.html">task</a> &b)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<class F, class X><br>
- struct tbb::internal::thread_closure_1< F, X ></h3>
-
-Structure used to pass user function with 1 argument to thread.
+Provides default methods for partition objects without affinity.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00314.html">tbb_thread.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00341.html">partitioner.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00236.html b/doc/html/a00236.html
index ff70d2e..2954bf4 100644
--- a/doc/html/a00236.html
+++ b/doc/html/a00236.html
@@ -1,41 +1,87 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::tick_count Class Reference</title>
+<title>tbb::pipeline Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tick_count Class Reference</h1>Absolute timestamp.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::pipeline Class Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A processing pipeling that applies filters to items.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00315.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00342.html">pipeline.h</a>></code>
<p>
-<a href="a00130.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00097.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::tick_count::tick_count"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a0">tick_count</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::pipeline::pipeline"></a>
+__TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a0">pipeline</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an absolute timestamp initialized to zero. <br></td></tr>
-<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::tick_count::now"></a>
-<a class="el" href="a00236.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#e0">now</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty pipeline. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a1">~pipeline</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return current time. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::pipeline::add_filter"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a2">add_filter</a> (<a class="el" href="a00216.html">filter</a> &filter_)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Add filter to end of pipeline. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::pipeline::run"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a3">run</a> (size_t max_number_of_live_tokens)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::pipeline::run"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a4">run</a> (size_t max_number_of_live_tokens, <a class="el" href="a00262.html">tbb::task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Run the pipeline to completion with user-supplied context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::pipeline::clear"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a5">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Remove all filters from the pipeline. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::tick_count::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#n0">operator-</a> (const <a class="el" href="a00236.html">tick_count</a> &t1, const <a class="el" href="a00236.html">tick_count</a> &t0)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::pipeline::internal::stage_task"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::stage_task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::pipeline::filter"></a>
+class </td><td class="memItemRight" valign="bottom"><b>filter</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Absolute timestamp.
+A processing pipeling that applies filters to items.
<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a1" doxytag="tbb::pipeline::~pipeline"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual __TBB_EXPORTED_METHOD tbb::pipeline::~<a class="el" href="a00236.html">pipeline</a> </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Though the current implementation declares the destructor virtual, do not rely on this detail. The virtualness is deprecated and may disappear in future versions of TBB. </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00315.html">tick_count.h</a></ul>
+<li><a class="el" href="a00342.html">pipeline.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00237.html b/doc/html/a00237.html
index ebb972e..e0935f1 100644
--- a/doc/html/a00237.html
+++ b/doc/html/a00237.html
@@ -1,63 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::tick_count::interval_t Class Reference</title>
+<title>tbb::pre_scan_tag Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tick_count::interval_t Class Reference</h1>Relative time interval.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::pre_scan_tag Struct Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Used to indicate that the initial scan is being performed.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00315.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-<a href="a00131.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::tick_count::interval_t::interval_t"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a0">interval_t</a> ()</td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::pre_scan_tag::is_final_scan"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>is_final_scan</b> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing zero time duration. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::tick_count::interval_t::interval_t"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a1">interval_t</a> (double sec)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing sec seconds time duration. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::tick_count::interval_t::seconds"></a>
-double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a2">seconds</a> () const </td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the length of a time interval in seconds. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::tick_count::interval_t::operator+="></a>
-<a class="el" href="a00237.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a3">operator+=</a> (const <a class="el" href="a00237.html">interval_t</a> &i)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Accumulation operator. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::tick_count::interval_t::operator-="></a>
-<a class="el" href="a00237.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a4">operator-=</a> (const <a class="el" href="a00237.html">interval_t</a> &i)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtraction operator. <br></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::tick_count::interval_t::tbb::tick_count"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n0">tbb::tick_count</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::tick_count::interval_t::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n1">operator-</a> (const <a class="el" href="a00236.html">tick_count</a> &t1, const <a class="el" href="a00236.html">tick_count</a> &t0)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Extract the intervals from the tick_counts and subtract them. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::tick_count::interval_t::operator+"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n2">operator+</a> (const <a class="el" href="a00237.html">interval_t</a> &i, const <a class="el" href="a00237.html">interval_t</a> &j)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add two intervals. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::tick_count::interval_t::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n3">operator-</a> (const <a class="el" href="a00237.html">interval_t</a> &i, const <a class="el" href="a00237.html">interval_t</a> &j)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Relative time interval.
+Used to indicate that the initial scan is being performed.
<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00315.html">tick_count.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00238.html b/doc/html/a00238.html
index 9b74ef3..bb412b7 100644
--- a/doc/html/a00238.html
+++ b/doc/html/a00238.html
@@ -1,115 +1,48 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::vector_iterator< Container, Value > Class Template Reference</title>
+<title>tbb::queuing_mutex Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::vector_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_mutex Class Reference</h1>Queuing lock with local-only spinning.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00291.html">concurrent_vector.h</a>></code>
+<code>#include <<a class="el" href="a00343.html">queuing_mutex.h</a>></code>
<p>
-<a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::vector_iterator::difference_type"></a>
-typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::vector_iterator::value_type"></a>
-typedef Value </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::internal::vector_iterator::pointer"></a>
-typedef Value * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::internal::vector_iterator::reference"></a>
-typedef Value & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::internal::vector_iterator::iterator_category"></a>
-typedef std::random_access_iterator_tag </td><td class="memItemRight" valign="bottom"><b>iterator_category</b></td></tr>
-
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::vector_iterator::vector_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a0">vector_iterator</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::vector_iterator::vector_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><b>vector_iterator</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::vector_iterator::operator+"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::vector_iterator::operator+="></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator+=</b> (ptrdiff_t offset)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::vector_iterator::operator-"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (ptrdiff_t offset) const </td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::vector_iterator::operator-="></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-=</b> (ptrdiff_t offset)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::queuing_mutex::queuing_mutex"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a0">queuing_mutex</a> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::vector_iterator::operator *"></a>
-Value & </td><td class="memItemRight" valign="bottom"><b>operator *</b> () const </td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::queuing_mutex::internal_construct"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::vector_iterator::operator[]"></a>
-Value & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (ptrdiff_t k) const </td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::queuing_mutex::is_rw_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::vector_iterator::operator->"></a>
-Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::queuing_mutex::is_recursive_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::vector_iterator::operator++"></a>
-<a class="el" href="a00238.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a9">operator++</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::queuing_mutex::is_fair_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pre increment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::vector_iterator::operator--"></a>
-<a class="el" href="a00238.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a10">operator--</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Pre decrement. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::internal::vector_iterator::operator++"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a11">operator++</a> (int)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::vector_iterator::operator--"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a12">operator--</a> (int)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Post decrement. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::vector_iterator::internal::vector_iterator"></a>
-class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::vector_iterator::tbb::concurrent_vector"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#n1">tbb::concurrent_vector</a></td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n2" doxytag="tbb::internal::vector_iterator::operator+"></a>
-template<typename C, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00238.html">vector_iterator</a>< C, T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &v)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n3" doxytag="tbb::internal::vector_iterator::operator=="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n4" doxytag="tbb::internal::vector_iterator::operator<"></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n5" doxytag="tbb::internal::vector_iterator::operator-"></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::queuing_mutex::scoped_lock"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Container, typename Value><br>
- class tbb::internal::vector_iterator< Container, Value ></h3>
-
-Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/.
-<p>
-Value is either the T or const T type of the container.
+Queuing lock with local-only spinning.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00291.html">concurrent_vector.h</a></ul>
+<li><a class="el" href="a00343.html">queuing_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00239.html b/doc/html/a00239.html
index fdc79e8..565207c 100644
--- a/doc/html/a00239.html
+++ b/doc/html/a00239.html
@@ -1,23 +1,113 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::version_tag_v3 Struct Reference</title>
+<title>tbb::queuing_mutex::scoped_lock Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::version_tag_v3 Struct Reference</h1><code>#include <<a class="el" href="a00313.html">tbb_stddef.h</a>></code>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
+<a href="#_details">More...</a>
<p>
-<table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00343.html">queuing_mutex.h</a>></code>
+<p>
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
+<p>
+Inheritance diagram for tbb::queuing_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00099.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a0">scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a1">scoped_lock</a> (<a class="el" href="a00238.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::queuing_mutex::scoped_lock::~scoped_lock"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a2">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::queuing_mutex::scoped_lock::acquire"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a3">acquire</a> (<a class="el" href="a00238.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::queuing_mutex::scoped_lock::try_acquire"></a>
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a4">try_acquire</a> (<a class="el" href="a00238.html">queuing_mutex</a> &m)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex if free (i.e. non-blocking). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::queuing_mutex::scoped_lock::release"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#a5">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Version tag can be necessary to prevent loader on Linux from using the wrong symbol in debug builds (when inline functions are compiled as out-of-line). *
+The scoped locking pattern.
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="tbb::queuing_mutex::scoped_lock::scoped_lock"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Construct lock that has not acquired a mutex.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00313.html">tbb_stddef.h</a></ul>
+Equivalent to zero-initialization of *this. </td>
+ </tr>
+</table>
+<a class="anchor" name="a1" doxytag="tbb::queuing_mutex::scoped_lock::scoped_lock"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">tbb::queuing_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00238.html">queuing_mutex</a> & </td>
+ <td class="mdname1" valign="top" nowrap> <em>m</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Acquire lock on given mutex.
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00343.html">queuing_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00240.html b/doc/html/a00240.html
index 49e0e5f..fd8d445 100644
--- a/doc/html/a00240.html
+++ b/doc/html/a00240.html
@@ -1,40 +1,54 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::while_group_task< Body > Class Template Reference</title>
+<title>tbb::queuing_rw_mutex Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_group_task< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_rw_mutex Class Reference</h1>Reader-writer lock with local-only spinning.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00298.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00344.html">queuing_rw_mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::while_group_task< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00076.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00100.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::queuing_rw_mutex::queuing_rw_mutex"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#a0">queuing_rw_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::queuing_rw_mutex::~queuing_rw_mutex"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#a1">~queuing_rw_mutex</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::queuing_rw_mutex::internal_construct"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::queuing_rw_mutex::is_rw_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::queuing_rw_mutex::is_recursive_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_recursive_mutex</b> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s2" doxytag="tbb::queuing_rw_mutex::is_fair_mutex"></a>
+const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</b> = true</td></tr>
+
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_group_task::while_task"></a>
-class </td><td class="memItemRight" valign="bottom"><b>while_task</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::queuing_rw_mutex::scoped_lock"></a>
+class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body><br>
- class tbb::internal::while_group_task< Body ></h3>
-
-For internal use only.
+Reader-writer lock with local-only spinning.
<p>
-Unpacks a block of iterations.
+Adapted from Krieger, Stumm, et al. pseudocode at <a href="http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93">http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93</a>
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00298.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00344.html">queuing_rw_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00241.html b/doc/html/a00241.html
index 91b3c3c..fdb2b3d 100644
--- a/doc/html/a00241.html
+++ b/doc/html/a00241.html
@@ -1,43 +1,159 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::while_iteration_task< Body > Class Template Reference</title>
+<title>tbb::queuing_rw_mutex::scoped_lock Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_iteration_task< Body > Class Template Reference<br>
-<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::queuing_rw_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00298.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00344.html">queuing_rw_mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::internal::while_iteration_task< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::queuing_rw_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00101.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_iteration_task::while_group_task"></a>
-class </td><td class="memItemRight" valign="bottom"><b>while_group_task</b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a0">scoped_lock</a> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::while_iteration_task::tbb::parallel_while<Body>"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::parallel_while<Body></b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a1">scoped_lock</a> (<a class="el" href="a00240.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::queuing_rw_mutex::scoped_lock::~scoped_lock"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a2">~scoped_lock</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::queuing_rw_mutex::scoped_lock::acquire"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a3">acquire</a> (<a class="el" href="a00240.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::queuing_rw_mutex::scoped_lock::try_acquire"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a4">try_acquire</a> (<a class="el" href="a00240.html">queuing_rw_mutex</a> &m, bool write=true)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::queuing_rw_mutex::scoped_lock::release"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a5">release</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a6">upgrade_to_writer</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer. <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::queuing_rw_mutex::scoped_lock::downgrade_to_reader"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#a7">downgrade_to_reader</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Body><br>
- class tbb::internal::while_iteration_task< Body ></h3>
+The scoped locking pattern.
+<p>
+It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="tbb::queuing_rw_mutex::scoped_lock::scoped_lock"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Construct lock that has not acquired a mutex.
+<p>
+Equivalent to zero-initialization of *this. </td>
+ </tr>
+</table>
+<a class="anchor" name="a1" doxytag="tbb::queuing_rw_mutex::scoped_lock::scoped_lock"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">tbb::queuing_rw_mutex::scoped_lock::scoped_lock </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00240.html">queuing_rw_mutex</a> & </td>
+ <td class="mdname" nowrap> <em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>bool </td>
+ <td class="mdname" nowrap> <em>write</em> = <code>true</code></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Acquire lock on given mutex.
+<p>
+Upon entry, *this should not be in the "have acquired a mutex" state. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a6" doxytag="tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">bool tbb::queuing_rw_mutex::scoped_lock::upgrade_to_writer </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
-For internal use only.
<p>
-Executes one iteration of a while.
+Upgrade reader to become a writer.
<p>
+Returns true if the upgrade happened without re-acquiring the lock and false if opposite </td>
+ </tr>
+</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00298.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00344.html">queuing_rw_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00242.html b/doc/html/a00242.html
index ff3453d..f18731b 100644
--- a/doc/html/a00242.html
+++ b/doc/html/a00242.html
@@ -1,40 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::while_task< Stream, Body > Class Template Reference</title>
+<title>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Struct Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::while_task< Stream, Body > Class Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_body< RandomAccessIterator, Compare > Struct Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>For internal use only.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Body class used to sort elements in a range that is smaller than the grainsize.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00298.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00339.html">parallel_sort.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
-<p>
-Inheritance diagram for tbb::internal::while_task< Stream, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00077.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00083.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_task::tbb::parallel_while<Body>"></a>
-class </td><td class="memItemRight" valign="bottom"><b>tbb::parallel_while<Body></b></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::quick_sort_body::operator()"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="a00244.html">quick_sort_range</a>< RandomAccessIterator, Compare > &range) const </td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Stream, typename Body><br>
- class tbb::internal::while_task< Stream, Body ></h3>
+<h3>template<typename RandomAccessIterator, typename Compare><br>
+ struct tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></h3>
-For internal use only.
-<p>
-Gets block of iterations from a stream and packages them into a <a class="el" href="a00240.html">while_group_task</a>.
+Body class used to sort elements in a range that is smaller than the grainsize.
<p>
-<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00298.html">parallel_while.h</a></ul>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00339.html">parallel_sort.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00243.html b/doc/html/a00243.html
new file mode 100644
index 0000000..6e9150b
--- /dev/null
+++ b/doc/html/a00243.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare > Class Template Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Body class used to test if elements in a range are presorted.
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00339.html">parallel_sort.h</a>></code>
+<p>
+Inherits <a class="el" href="a00229.html">tbb::internal::no_assign</a>.
+<p>
+Inheritance diagram for tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00082.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::quick_sort_pretest_body::quick_sort_pretest_body"></a>
+ </td><td class="memItemRight" valign="bottom"><b>quick_sort_pretest_body</b> (const Compare &_comp)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::quick_sort_pretest_body::operator()"></a>
+void </td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="a00195.html">blocked_range</a>< RandomAccessIterator > &range) const </td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template<typename RandomAccessIterator, typename Compare><br>
+ class tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></h3>
+
+Body class used to test if elements in a range are presorted.
+<p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00339.html">parallel_sort.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00213.html b/doc/html/a00244.html
similarity index 77%
copy from doc/html/a00213.html
copy to doc/html/a00244.html
index 075e584..421e21c 100644
--- a/doc/html/a00213.html
+++ b/doc/html/a00244.html
@@ -1,19 +1,21 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Struct Template Reference</title>
+<title>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Struct Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::quick_sort_range< RandomAccessIterator, Compare > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>Range used in quicksort to split elements into subranges based on a value.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00297.html">parallel_sort.h</a>></code>
+<code>#include <<a class="el" href="a00339.html">parallel_sort.h</a>></code>
<p>
-<a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inherits <a class="el" href="a00229.html">tbb::internal::no_assign</a>.
+<p>
+Inheritance diagram for tbb::internal::quick_sort_range< RandomAccessIterator, Compare >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00081.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::quick_sort_range::quick_sort_range"></a>
@@ -26,7 +28,7 @@ bool </td><td class="memItemRight" valign="bottom"><b>empty</b> () const </
bool </td><td class="memItemRight" valign="bottom"><b>is_divisible</b> () const </td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::quick_sort_range::quick_sort_range"></a>
- </td><td class="memItemRight" valign="bottom"><b>quick_sort_range</b> (<a class="el" href="a00213.html">quick_sort_range</a> &range, <a class="el" href="a00221.html">split</a>)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>quick_sort_range</b> (<a class="el" href="a00244.html">quick_sort_range</a> &range, <a class="el" href="a00254.html">split</a>)</td></tr>
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::quick_sort_range::comp"></a>
@@ -45,17 +47,17 @@ const size_t </td><td class="memItemRight" valign="bottom"><b>grainsize</b>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<typename RandomAccessIterator, typename Compare><br>
- struct tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></h3>
+ class tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></h3>
Range used in quicksort to split elements into subranges based on a value.
<p>
The split operation selects a splitter and places all elements less than or equal to the value in the first range and the remaining elements in the second range.
<p>
-<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00297.html">parallel_sort.h</a></ul>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00339.html">parallel_sort.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00214.html b/doc/html/a00245.html
similarity index 85%
copy from doc/html/a00214.html
copy to doc/html/a00245.html
index cb3e22f..19087a4 100644
--- a/doc/html/a00214.html
+++ b/doc/html/a00245.html
@@ -4,19 +4,19 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::recursive_mutex Class Reference</h1>Mutex that allows recursive mutex acquisition.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00303.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00345.html">recursive_mutex.h</a>></code>
<p>
-<a href="a00093.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00102.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::recursive_mutex::recursive_mutex"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#a0">recursive_mutex</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#a0">recursive_mutex</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired <a class="el" href="a00245.html">recursive_mutex</a>. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::recursive_mutex::is_rw_mutex"></a>
const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
@@ -38,10 +38,10 @@ Mutex that allows recursive mutex acquisition.
Mutex that allows recursive mutex acquisition.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00345.html">recursive_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00215.html b/doc/html/a00246.html
similarity index 79%
copy from doc/html/a00215.html
copy to doc/html/a00246.html
index 775cf41..35e8178 100644
--- a/doc/html/a00215.html
+++ b/doc/html/a00246.html
@@ -4,38 +4,38 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::recursive_mutex::scoped_lock Class Reference</h1>The scoped locking pattern.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00303.html">recursive_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00345.html">recursive_mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::recursive_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00094.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::recursive_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00103.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::recursive_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a0">scoped_lock</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a0">scoped_lock</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a1">scoped_lock</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a <a class="el" href="a00245.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a1">scoped_lock</a> (<a class="el" href="a00245.html">recursive_mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::recursive_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a2">~scoped_lock</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a2">~scoped_lock</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::recursive_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a3">acquire</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a3">acquire</a> (<a class="el" href="a00245.html">recursive_mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::recursive_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a4">try_acquire</a> (<a class="el" href="a00214.html">recursive_mutex</a> &<a class="el" href="a00198.html">mutex</a>)</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a4">try_acquire</a> (<a class="el" href="a00245.html">recursive_mutex</a> &<a class="el" href="a00227.html">mutex</a>)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00214.html">recursive_mutex</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given <a class="el" href="a00245.html">recursive_mutex</a>. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::recursive_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#a5">release</a> ()</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#a5">release</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
</table>
@@ -53,7 +53,7 @@ It helps to avoid the common problem of forgetting to release lock. It also nice
<tr>
<td class="md" nowrap valign="top">tbb::recursive_mutex::scoped_lock::scoped_lock </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00214.html">recursive_mutex</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00245.html">recursive_mutex</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>mutex</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
@@ -76,10 +76,10 @@ Upon entry, *this should not be in the "have acquired a mutex" state. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00303.html">recursive_mutex.h</a></ul>
+<li><a class="el" href="a00345.html">recursive_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00172.html b/doc/html/a00247.html
similarity index 56%
rename from doc/html/a00172.html
rename to doc/html/a00247.html
index dbb4e06..8ed6761 100644
--- a/doc/html/a00172.html
+++ b/doc/html/a00247.html
@@ -1,87 +1,85 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::cache_aligned_allocator< T > Class Template Reference</title>
+<title>tbb::scalable_allocator< T > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::cache_aligned_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::scalable_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00288.html">cache_aligned_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00346.html">scalable_allocator.h</a>></code>
<p>
-<a href="a00016.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00104.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::cache_aligned_allocator::pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::scalable_allocator::pointer"></a>
typedef T * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::cache_aligned_allocator::const_pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::scalable_allocator::const_pointer"></a>
typedef const T * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::cache_aligned_allocator::reference"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::scalable_allocator::reference"></a>
typedef T & </td><td class="memItemRight" valign="bottom"><b>reference</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::cache_aligned_allocator::const_reference"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w3" doxytag="tbb::scalable_allocator::const_reference"></a>
typedef const T & </td><td class="memItemRight" valign="bottom"><b>const_reference</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::cache_aligned_allocator::value_type"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w4" doxytag="tbb::scalable_allocator::value_type"></a>
typedef T </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::cache_aligned_allocator::size_type"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w5" doxytag="tbb::scalable_allocator::size_type"></a>
typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::cache_aligned_allocator::difference_type"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::scalable_allocator::difference_type"></a>
typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::cache_aligned_allocator::cache_aligned_allocator"></a>
- </td><td class="memItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00172.html">cache_aligned_allocator</a> &) throw ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::scalable_allocator::scalable_allocator"></a>
+ </td><td class="memItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00247.html">scalable_allocator</a> &) throw ()</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::cache_aligned_allocator::cache_aligned_allocator"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::scalable_allocator::scalable_allocator"></a>
template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>cache_aligned_allocator</b> (const <a class="el" href="a00172.html">cache_aligned_allocator</a>< U > &) throw ()</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>scalable_allocator</b> (const <a class="el" href="a00247.html">scalable_allocator</a>< U > &) throw ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::cache_aligned_allocator::address"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::scalable_allocator::address"></a>
pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::cache_aligned_allocator::address"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::scalable_allocator::address"></a>
const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::cache_aligned_allocator::allocate"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#a5">allocate</a> (size_type n, const void *hint=0)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::scalable_allocator::allocate"></a>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#a5">allocate</a> (size_type n, const void *=0)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::cache_aligned_allocator::deallocate"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::scalable_allocator::deallocate"></a>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::cache_aligned_allocator::max_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#a7">max_size</a> () const throw ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::scalable_allocator::max_size"></a>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#a7">max_size</a> () const throw ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::cache_aligned_allocator::construct"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#a8">construct</a> (pointer p, const T &value)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::scalable_allocator::construct"></a>
+void </td><td class="memItemRight" valign="bottom"><b>construct</b> (pointer p, const T &val)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::cache_aligned_allocator::destroy"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html#a9">destroy</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::scalable_allocator::destroy"></a>
+void </td><td class="memItemRight" valign="bottom"><b>destroy</b> (pointer p)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<typename T><br>
- class tbb::cache_aligned_allocator< T ></h3>
+ class tbb::scalable_allocator< T ></h3>
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<p>
The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00288.html">cache_aligned_allocator.h</a></ul>
+<li><a class="el" href="a00346.html">scalable_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00233.html b/doc/html/a00248.html
similarity index 66%
copy from doc/html/a00233.html
copy to doc/html/a00248.html
index 535d1d5..4717b5d 100644
--- a/doc/html/a00233.html
+++ b/doc/html/a00248.html
@@ -1,39 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::tbb_allocator< void > Class Template Reference</title>
+<title>tbb::scalable_allocator< void > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::scalable_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00310.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00346.html">scalable_allocator.h</a>></code>
<p>
-<a href="a00112.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00106.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::tbb_allocator< void >::pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::scalable_allocator< void >::pointer"></a>
typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::tbb_allocator< void >::const_pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::scalable_allocator< void >::const_pointer"></a>
typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::tbb_allocator< void >::value_type"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::scalable_allocator< void >::value_type"></a>
typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<><br>
- class tbb::tbb_allocator< void ></h3>
+ class tbb::scalable_allocator< void ></h3>
Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00310.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00346.html">scalable_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00167.html b/doc/html/a00249.html
similarity index 66%
rename from doc/html/a00167.html
rename to doc/html/a00249.html
index 68021a8..6a0c7f1 100644
--- a/doc/html/a00167.html
+++ b/doc/html/a00249.html
@@ -1,41 +1,41 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::auto_partitioner Class Reference</title>
+<title>tbb::simple_partitioner Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::auto_partitioner Class Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::simple_partitioner Class Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>An auto partitioner.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>A simple partitioner
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00299.html">partitioner.h</a>></code>
+<code>#include <<a class="el" href="a00341.html">partitioner.h</a>></code>
<p>
-<a href="a00083.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00090.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::auto_partitioner::internal::start_for"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::simple_partitioner::internal::start_for"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::start_for</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::auto_partitioner::internal::start_reduce"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::simple_partitioner::internal::start_reduce"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::start_reduce</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::auto_partitioner::internal::start_scan"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::simple_partitioner::internal::start_scan"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::start_scan</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-An auto partitioner.
+A simple partitioner
<p>
-The range is initial divided into several large chunks. Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible.
+Divides the range until the range is not divisible.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00299.html">partitioner.h</a></ul>
+<li><a class="el" href="a00341.html">partitioner.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00217.html b/doc/html/a00250.html
similarity index 83%
copy from doc/html/a00217.html
copy to doc/html/a00250.html
index 360db11..b8d0888 100644
--- a/doc/html/a00217.html
+++ b/doc/html/a00250.html
@@ -4,18 +4,21 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::spin_mutex Class Reference</h1>A lock that occupies a single byte.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00305.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00347.html">spin_mutex.h</a>></code>
<p>
-<a href="a00095.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00108.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#a0">spin_mutex</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a0">spin_mutex</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired lock. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::spin_mutex::internal_construct"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><b>internal_construct</b> ()</td></tr>
+
<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::spin_mutex::is_rw_mutex"></a>
const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = false</td></tr>
@@ -34,7 +37,7 @@ class </td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td>
<hr><a name="_details"></a><h2>Detailed Description</h2>
A lock that occupies a single byte.
<p>
-A <a class="el" href="a00217.html">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically <20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld.
+A <a class="el" href="a00250.html">spin_mutex</a> is a spin mutex that fits in a single byte. It should be used only for locking short critical sections (typically <20 instructions) when fairness is not an issue. If zero-initialized, the mutex is considered unheld.
<p>
<hr><h2>Constructor & Destructor Documentation</h2>
<a class="anchor" name="a0" doxytag="tbb::spin_mutex::spin_mutex"></a><p>
@@ -67,10 +70,10 @@ Equivalent to zero-initialization of *this. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00305.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00347.html">spin_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00218.html b/doc/html/a00251.html
similarity index 78%
copy from doc/html/a00218.html
copy to doc/html/a00251.html
index f0b6233..cb67505 100644
--- a/doc/html/a00218.html
+++ b/doc/html/a00251.html
@@ -4,39 +4,39 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::spin_mutex::scoped_lock Class Reference</h1>Represents acquisition of a mutex.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00305.html">spin_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00347.html">spin_mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::spin_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00096.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::spin_mutex::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00109.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::spin_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a0">scoped_lock</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a0">scoped_lock</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct without without acquiring a mutex. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct without acquiring a mutex. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::spin_mutex::scoped_lock::scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a1">scoped_lock</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a1">scoped_lock</a> (<a class="el" href="a00250.html">spin_mutex</a> &m)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct and acquire lock on a mutex. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::spin_mutex::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a2">acquire</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a2">acquire</a> (<a class="el" href="a00250.html">spin_mutex</a> &m)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_mutex::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a3">try_acquire</a> (<a class="el" href="a00217.html">spin_mutex</a> &m)</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a3">try_acquire</a> (<a class="el" href="a00250.html">spin_mutex</a> &m)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquiring lock (non-blocking). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::spin_mutex::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a4">release</a> ()</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a4">release</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::spin_mutex::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#a5">~scoped_lock</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html#a5">~scoped_lock</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy lock. If holding a lock, releases the lock first. <br></td></tr>
</table>
@@ -44,10 +44,10 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="a002
Represents acquisition of a mutex.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00305.html">spin_mutex.h</a></ul>
+<li><a class="el" href="a00347.html">spin_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00219.html b/doc/html/a00252.html
similarity index 76%
copy from doc/html/a00219.html
copy to doc/html/a00252.html
index edccf4c..a0bb59f 100644
--- a/doc/html/a00219.html
+++ b/doc/html/a00252.html
@@ -4,19 +4,23 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::spin_rw_mutex_v3 Class Reference</h1>Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00306.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00348.html">spin_rw_mutex.h</a>></code>
<p>
-<a href="a00097.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00110.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::spin_rw_mutex_v3::spin_rw_mutex_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#a0">spin_rw_mutex_v3</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#a0">spin_rw_mutex_v3</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct unacquired mutex. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::spin_rw_mutex_v3::~spin_rw_mutex_v3"></a>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#a1">~spin_rw_mutex_v3</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor asserts if the mutex is acquired, i.e. state is zero. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::spin_rw_mutex_v3::is_rw_mutex"></a>
const bool </td><td class="memItemRight" valign="bottom"><b>is_rw_mutex</b> = true</td></tr>
@@ -32,10 +36,10 @@ const bool </td><td class="memItemRight" valign="bottom"><b>is_fair_mutex</
Fast, unfair, spinning reader-writer lock with backoff and writer-preference.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00306.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00348.html">spin_rw_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00220.html b/doc/html/a00253.html
similarity index 86%
copy from doc/html/a00220.html
copy to doc/html/a00253.html
index db9e34a..6737ee7 100644
--- a/doc/html/a00220.html
+++ b/doc/html/a00253.html
@@ -4,44 +4,44 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::spin_rw_mutex_v3::scoped_lock Class Reference</h1>The scoped locking pattern.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00306.html">spin_rw_mutex.h</a>></code>
+<code>#include <<a class="el" href="a00348.html">spin_rw_mutex.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00098.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::spin_rw_mutex_v3::scoped_lock:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00111.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a0">scoped_lock</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a0">scoped_lock</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct lock that has not acquired a mutex. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a1">scoped_lock</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a1">scoped_lock</a> (<a class="el" href="a00252.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <a href="#a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::~scoped_lock"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a2">~scoped_lock</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a2">~scoped_lock</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock (if lock is held). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::acquire"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a3">acquire</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a3">acquire</a> (<a class="el" href="a00252.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Acquire lock on given mutex. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a4">upgrade_to_writer</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a4">upgrade_to_writer</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Upgrade reader to become a writer. <a href="#a4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::release"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a5">release</a> ()</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a5">release</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Release lock. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::downgrade_to_reader"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a6">downgrade_to_reader</a> ()</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a6">downgrade_to_reader</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Downgrade writer to become a reader. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::spin_rw_mutex_v3::scoped_lock::try_acquire"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#a7">try_acquire</a> (<a class="el" href="a00219.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a7">try_acquire</a> (<a class="el" href="a00252.html">spin_rw_mutex</a> &m, bool write=true)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Try acquire lock on given mutex. <br></td></tr>
</table>
@@ -88,7 +88,7 @@ Equivalent to zero-initialization of *this. </td>
<tr>
<td class="md" nowrap valign="top">tbb::spin_rw_mutex_v3::scoped_lock::scoped_lock </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00219.html">spin_rw_mutex</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00252.html">spin_rw_mutex</a> & </td>
<td class="mdname" nowrap> <em>m</em>, </td>
</tr>
<tr>
@@ -150,10 +150,10 @@ Returns true if the upgrade happened without re-acquiring the lock and false if
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00306.html">spin_rw_mutex.h</a></ul>
+<li><a class="el" href="a00348.html">spin_rw_mutex.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00168.html b/doc/html/a00254.html
similarity index 59%
rename from doc/html/a00168.html
rename to doc/html/a00254.html
index 6d97b21..269924a 100644
--- a/doc/html/a00168.html
+++ b/doc/html/a00254.html
@@ -1,30 +1,31 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::bad_last_alloc Class Reference</title>
+<title>tbb::split Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::bad_last_alloc Class Reference</h1>Exception for concurrent containers.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::split Class Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Dummy type that distinguishes splitting constructor from copy constructor.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00311.html">tbb_exception.h</a>></code>
+<code>#include <<a class="el" href="a00356.html">tbb_stddef.h</a>></code>
<p>
-<a href="a00114.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::bad_last_alloc::what"></a>
-virtual const char * </td><td class="memItemRight" valign="bottom"><b>what</b> () const throw ()</td></tr>
-
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Exception for concurrent containers.
+Dummy type that distinguishes splitting constructor from copy constructor.
+<p>
+See description of parallel_for and parallel_reduce for example usages.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00311.html">tbb_exception.h</a></ul>
+<li><a class="el" href="a00356.html">tbb_stddef.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00222.html b/doc/html/a00255.html
similarity index 72%
copy from doc/html/a00222.html
copy to doc/html/a00255.html
index 40a08cb..91c5ad1 100644
--- a/doc/html/a00222.html
+++ b/doc/html/a00255.html
@@ -4,23 +4,26 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::start_for< Range, Body, Partitioner > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>Task type used in parallel_for.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00294.html">parallel_for.h</a>></code>
+<code>#include <<a class="el" href="a00336.html">parallel_for.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::start_for< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00062.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::start_for< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00069.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_for::run"></a>
void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, const Body &body, const Partitioner &partitioner)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1" doxytag="tbb::internal::start_for::run"></a>
+void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, const Body &body, const Partitioner &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<typename Range, typename Body, typename Partitioner><br>
@@ -29,10 +32,10 @@ void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range
Task type used in parallel_for.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00294.html">parallel_for.h</a></ul>
+<li><a class="el" href="a00336.html">parallel_for.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00223.html b/doc/html/a00256.html
similarity index 69%
copy from doc/html/a00223.html
copy to doc/html/a00256.html
index acd7449..a7b3d57 100644
--- a/doc/html/a00223.html
+++ b/doc/html/a00256.html
@@ -4,23 +4,29 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::start_reduce< Range, Body, Partitioner > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>Task type used to split the work of parallel_reduce.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00337.html">parallel_reduce.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::start_reduce< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00064.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::start_reduce< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00071.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_reduce::run"></a>
void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, const Partitioner &partitioner)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1" doxytag="tbb::internal::start_reduce::run"></a>
+void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, const Partitioner &partitioner)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2" doxytag="tbb::internal::start_reduce::run"></a>
+void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, const Partitioner &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::start_reduce::finish_reduce"></a>
class </td><td class="memItemRight" valign="bottom"><b>finish_reduce</b></td></tr>
@@ -33,10 +39,10 @@ class </td><td class="memItemRight" valign="bottom"><b>finish_reduce</b></t
Task type used to split the work of parallel_reduce.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00337.html">parallel_reduce.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00224.html b/doc/html/a00257.html
similarity index 70%
copy from doc/html/a00224.html
copy to doc/html/a00257.html
index 70feef5..c7b9023 100644
--- a/doc/html/a00224.html
+++ b/doc/html/a00257.html
@@ -4,22 +4,25 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::start_reduce_with_affinity< Range, Body > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
-</h1>Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>Task type used to split the work of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00295.html">parallel_reduce.h</a>></code>
+<code>#include <<a class="el" href="a00337.html">parallel_reduce.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::start_reduce_with_affinity< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00066.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::start_reduce_with_affinity< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00073.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_reduce_with_affinity::run"></a>
-void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, <a class="el" href="a00162.html">affinity_partitioner</a> &partitioner)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1" doxytag="tbb::internal::start_reduce_with_affinity::run"></a>
+void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range &range, Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::start_reduce_with_affinity::finish_reduce_with_affinity"></a>
@@ -30,13 +33,13 @@ class </td><td class="memItemRight" valign="bottom"><b>finish_reduce_with_a
<h3>template<typename Range, typename Body><br>
class tbb::internal::start_reduce_with_affinity< Range, Body ></h3>
-Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>.
+Task type used to split the work of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00295.html">parallel_reduce.h</a></ul>
+<li><a class="el" href="a00337.html">parallel_reduce.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00225.html b/doc/html/a00258.html
similarity index 76%
copy from doc/html/a00225.html
copy to doc/html/a00258.html
index 3834933..aaa28a1 100644
--- a/doc/html/a00225.html
+++ b/doc/html/a00258.html
@@ -4,25 +4,25 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::start_scan< Range, Body, Partitioner > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>Initial task to split the work.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::start_scan< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00072.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::start_scan< Range, Body, Partitioner >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00080.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::start_scan::start_scan"></a>
- </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00227.html">sum_node_type</a> *&return_slot_, <a class="el" href="a00225.html">start_scan</a> &parent, <a class="el" href="a00227.html">sum_node_type</a> *parent_sum_)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00260.html">sum_node_type</a> *&return_slot_, <a class="el" href="a00258.html">start_scan</a> &parent, <a class="el" href="a00260.html">sum_node_type</a> *parent_sum_)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::start_scan::start_scan"></a>
- </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00227.html">sum_node_type</a> *&return_slot_, const Range &range_, <a class="el" href="a00191.html">final_sum_type</a> &body_, const Partitioner &partitioner_)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>start_scan</b> (<a class="el" href="a00260.html">sum_node_type</a> *&return_slot_, const Range &range_, <a class="el" href="a00218.html">final_sum_type</a> &body_, const Partitioner &partitioner_)</td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::start_scan::run"></a>
@@ -36,10 +36,10 @@ void </td><td class="memItemRight" valign="bottom"><b>run</b> (const Range
Initial task to split the work.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00226.html b/doc/html/a00259.html
similarity index 83%
copy from doc/html/a00226.html
copy to doc/html/a00259.html
index acb6111..5db3e96 100644
--- a/doc/html/a00226.html
+++ b/doc/html/a00259.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::strip< T > Struct Template Reference</h1>Strips its template type argument from 'cv' and '&' qualifiers.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00335.html">parallel_do.h</a>></code>
<p>
-<a href="a00046.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00053.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::strip::type"></a>
@@ -24,10 +24,10 @@ typedef T </td><td class="memItemRight" valign="bottom"><b>type</b></td></t
Strips its template type argument from 'cv' and '&' qualifiers.
<p>
<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00335.html">parallel_do.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00227.html b/doc/html/a00260.html
similarity index 82%
copy from doc/html/a00227.html
copy to doc/html/a00260.html
index 75c7a73..f30d98b 100644
--- a/doc/html/a00227.html
+++ b/doc/html/a00260.html
@@ -4,25 +4,25 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::sum_node< Range, Body > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>Split work to be done in the scan.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00296.html">parallel_scan.h</a>></code>
+<code>#include <<a class="el" href="a00338.html">parallel_scan.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::sum_node< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00070.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::sum_node< Range, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00078.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::sum_node::incoming"></a>
-<a class="el" href="a00191.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>incoming</b></td></tr>
+<a class="el" href="a00218.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>incoming</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::sum_node::body"></a>
-<a class="el" href="a00191.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>body</b></td></tr>
+<a class="el" href="a00218.html">final_sum_type</a> * </td><td class="memItemRight" valign="bottom"><b>body</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="tbb::internal::sum_node::stuff_last"></a>
Body * </td><td class="memItemRight" valign="bottom"><b>stuff_last</b></td></tr>
@@ -42,10 +42,10 @@ class </td><td class="memItemRight" valign="bottom"><b>finish_scan</b></td>
Split work to be done in the scan.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00296.html">parallel_scan.h</a></ul>
+<li><a class="el" href="a00338.html">parallel_scan.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00228.html b/doc/html/a00261.html
similarity index 75%
copy from doc/html/a00228.html
copy to doc/html/a00261.html
index 09a33aa..c214332 100644
--- a/doc/html/a00228.html
+++ b/doc/html/a00261.html
@@ -4,152 +4,163 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::task Class Reference</h1>Base class for user-defined tasks.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00349.html">task.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inherited by <a class="el" href="a00188.html">tbb::empty_task</a>, <a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>, tbb::internal::do_group_task_input< Body, Item >, <a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a>, tbb::internal::do_iteration_task_iter< Iterator, Body, Item >, <a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>, <a class [...]
+Inherited by <a class="el" href="a00215.html">tbb::empty_task</a>, <a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>, tbb::internal::do_group_task_input< Body, Item >, <a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a>, tbb::internal::do_iteration_task_iter< Iterator, Body, Item >, <a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>, <a class [...]
<p>
-Inheritance diagram for tbb::task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00105.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::task:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00122.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a14">internal::intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w0">depth_type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00319.html#a22">internal::intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#w0">depth_type</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">A scheduling depth. <a href="#w0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a12">internal::affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w1">affinity_id</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00319.html#a11">internal::affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#w1">affinity_id</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity. <a href="#w1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#w8">state_type</a> { <br>
- <a class="el" href="a00228.html#w8w2">executing</a>,
-<a class="el" href="a00228.html#w8w3">reexecute</a>,
-<a class="el" href="a00228.html#w8w4">ready</a>,
-<a class="el" href="a00228.html#w8w5">allocated</a>,
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#w8">state_type</a> { <br>
+ <a class="el" href="a00261.html#w8w2">executing</a>,
+<a class="el" href="a00261.html#w8w3">reexecute</a>,
+<a class="el" href="a00261.html#w8w4">ready</a>,
+<a class="el" href="a00261.html#w8w5">allocated</a>,
<br>
- <a class="el" href="a00228.html#w8w6">freed</a>,
-<a class="el" href="a00228.html#w8w7">recycle</a>
+ <a class="el" href="a00261.html#w8w6">freed</a>,
+<a class="el" href="a00261.html#w8w7">recycle</a>
<br>
}</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration of task states that the scheduler considers. <a href="#w8">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::task::~task"></a>
-virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a0">~task</a> ()</td></tr>
+virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a0">~task</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::task::execute"></a>
-virtual <a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a1">execute</a> ()=0</td></tr>
+virtual <a class="el" href="a00261.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a1">execute</a> ()=0</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_continuation_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a2">allocate_continuation</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_continuation_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a2">allocate_continuation</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a continuation task of *this. <a href="#a2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task::allocate_child"></a>
-internal::allocate_child_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a3">allocate_child</a> ()</td></tr>
+internal::allocate_child_proxy & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a3">allocate_child</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a child task of *this. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_additional_child_of_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a4">allocate_additional_child_of</a> (<a class="el" href="a00228.html">task</a> &t)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_additional_child_of_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a4">allocate_additional_child_of</a> (<a class="el" href="a00261.html">task</a> &t)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Like allocate_child, except that task's parent becomes "t", not this. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a5">destroy</a> (<a class="el" href="a00228.html">task</a> &victim)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a5">destroy</a> (<a class="el" href="a00261.html">task</a> &victim)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a task. <a href="#a5"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a6">recycle_as_continuation</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a6">recycle_as_continuation</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Change this to be a continuation of its former self. <a href="#a6"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a7">recycle_as_safe_continuation</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a7">recycle_as_safe_continuation</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Recommended to use, safe variant of recycle_as_continuation. <a href="#a7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::task::recycle_as_child_of"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a8">recycle_as_child_of</a> (<a class="el" href="a00228.html">task</a> &new_parent)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a8">recycle_as_child_of</a> (<a class="el" href="a00261.html">task</a> &new_parent)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Change this to be a child of new_parent. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a9">recycle_to_reexecute</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a9">recycle_to_reexecute</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00228.html#a1">execute()</a> returns. <a href="#a9"></a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00261.html#a1">execute()</a> returns. <a href="#a9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::task::depth"></a>
-<a class="el" href="a00228.html#w0">depth_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a10">depth</a> () const </td></tr>
+<a class="el" href="a00261.html#w0">depth_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a10">depth</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Scheduling depth. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a11">set_depth</a> (<a class="el" href="a00228.html#w0">depth_type</a> new_depth)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a11">set_depth</a> (<a class="el" href="a00261.html#w0">depth_type</a> new_depth)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set scheduling depth to given value. <a href="#a11"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a12">add_to_depth</a> (int delta)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a12">add_to_depth</a> (int delta)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Change scheduling depth by given amount. <a href="#a12"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::task::set_ref_count"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a13">set_ref_count</a> (int count)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a13">set_ref_count</a> (int count)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set reference count. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a14">spawn</a> (<a class="el" href="a00228.html">task</a> &child)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a14">spawn</a> (<a class="el" href="a00261.html">task</a> &child)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Schedule task for execution when a worker becomes available. <a href="#a14"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a15">spawn</a> (<a class="el" href="a00229.html">task_list</a> &list)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a15">spawn</a> (<a class="el" href="a00263.html">task_list</a> &list)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn multiple tasks and clear list. <a href="#a15"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::task::spawn_and_wait_for_all"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a16">spawn_and_wait_for_all</a> (<a class="el" href="a00228.html">task</a> &child)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a16">spawn_and_wait_for_all</a> (<a class="el" href="a00261.html">task</a> &child)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::task::spawn_and_wait_for_all"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a17">spawn_and_wait_for_all</a> (<a class="el" href="a00229.html">task_list</a> &list)</td></tr>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a17">spawn_and_wait_for_all</a> (<a class="el" href="a00263.html">task_list</a> &list)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a18">wait_for_all</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a18">wait_for_all</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Wait for reference count to become one, and set reference count to zero. <a href="#a18"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::task::parent"></a>
-<a class="el" href="a00228.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a19">parent</a> () const </td></tr>
+<a class="el" href="a00261.html">task</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a19">parent</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">task on whose behalf this task is working, or NULL if this is a root. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a20" doxytag="tbb::task::is_stolen_task"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a20">is_stolen_task</a> () const </td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a20">is_stolen_task</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">True if task is owned by different thread than thread that owns its parent. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a21" doxytag="tbb::task::state"></a>
-<a class="el" href="a00228.html#w8">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a21">state</a> () const </td></tr>
+<a class="el" href="a00261.html#w8">state_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a21">state</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Current execution state. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a22" doxytag="tbb::task::ref_count"></a>
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a22">ref_count</a> () const </td></tr>
+int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a22">ref_count</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">The internal reference count. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a23" doxytag="tbb::task::is_owned_by_current_thread"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a23">is_owned_by_current_thread</a> () const </td></tr>
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a23">is_owned_by_current_thread</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">True if this task is owned by the calling thread; false otherwise. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a24" doxytag="tbb::task::set_affinity"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a24">set_affinity</a> (<a class="el" href="a00228.html#w1">affinity_id</a> id)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a24">set_affinity</a> (<a class="el" href="a00261.html#w1">affinity_id</a> id)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set affinity for this task. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a25" doxytag="tbb::task::affinity"></a>
-<a class="el" href="a00228.html#w1">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a25">affinity</a> () const </td></tr>
+<a class="el" href="a00261.html#w1">affinity_id</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a25">affinity</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Current affinity of this task. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#a26">note_affinity</a> (<a class="el" href="a00228.html#w1">affinity_id</a> id)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a26">note_affinity</a> (<a class="el" href="a00261.html#w1">affinity_id</a> id)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Invoked by scheduler to notify task that it ran on unexpected thread. <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a27">cancel_group_execution</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups. <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a28" doxytag="tbb::task::is_cancelled"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a28">is_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::task::allocate_root"></a>
-internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e0">allocate_root</a> ()</td></tr>
+internal::allocate_root_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#e0">allocate_root</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e1">spawn_root_and_wait</a> (<a class="el" href="a00228.html">task</a> &root)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1" doxytag="tbb::task::allocate_root"></a>
+internal::allocate_root_with_context_proxy </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#e1">allocate_root</a> (<a class="el" href="a00262.html">task_group_context</a> &ctx)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. <a href="#e1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e2">spawn_root_and_wait</a> (<a class="el" href="a00229.html">task_list</a> &root_list)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task associated with user supplied context. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#e2">spawn_root_and_wait</a> (<a class="el" href="a00261.html">task</a> &root)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish. <a href="#e2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3" doxytag="tbb::task::self"></a>
-<a class="el" href="a00228.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#e3">self</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. <a href="#e2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#e3">spawn_root_and_wait</a> (<a class="el" href="a00263.html">task_list</a> &root_list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="a00228.html#b0">task()</a> currently being run by this thread. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish. <a href="#e3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e4" doxytag="tbb::task::self"></a>
+<a class="el" href="a00261.html">task</a> &__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#e4">self</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The innermost task being executed or destroyed by the current thread at the moment. <br></td></tr>
<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0" doxytag="tbb::task::task"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#b0">task</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#b0">task</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
@@ -162,13 +173,16 @@ class </td><td class="memItemRight" valign="bottom"><b>internal::scheduler<
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::task::internal::allocate_root_proxy"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_proxy</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::task::internal::allocate_continuation_proxy"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::task::internal::allocate_root_with_context_proxy"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::task::internal::allocate_continuation_proxy"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_continuation_proxy</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n4" doxytag="tbb::task::internal::allocate_child_proxy"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::task::internal::allocate_child_proxy"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_child_proxy</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n5" doxytag="tbb::task::internal::allocate_additional_child_of_proxy"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n6" doxytag="tbb::task::internal::allocate_additional_child_of_proxy"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
</table>
@@ -182,7 +196,7 @@ Base class for user-defined tasks.
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a12">internal::affinity_id</a> <a class="el" href="a00228.html#w1">tbb::task::affinity_id</a> </td>
+ <td class="md" nowrap valign="top">typedef <a class="el" href="a00319.html#a11">internal::affinity_id</a> <a class="el" href="a00261.html#w1">tbb::task::affinity_id</a> </td>
</tr>
</table>
</td>
@@ -207,7 +221,7 @@ Guaranteed to be integral type. Value of 0 means no affinity. </td>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a14">internal::intptr</a> <a class="el" href="a00228.html#w0">tbb::task::depth_type</a> </td>
+ <td class="md" nowrap valign="top">typedef <a class="el" href="a00319.html#a22">internal::intptr</a> <a class="el" href="a00261.html#w0">tbb::task::depth_type</a> </td>
</tr>
</table>
</td>
@@ -233,7 +247,7 @@ Guaranteed to be a signed integral type. </td>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="a00228.html#w8">tbb::task::state_type</a> </td>
+ <td class="md" nowrap valign="top">enum <a class="el" href="a00261.html#w8">tbb::task::state_type</a> </td>
</tr>
</table>
</td>
@@ -252,7 +266,7 @@ Enumeration of task states that the scheduler considers.
<dl compact><dt><b>Enumeration values: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="w8w2" doxytag="executing"></a>executing</em> </td><td>
-task is running, and will be destroyed after method <a class="el" href="a00228.html#a1">execute()</a> completes. </td></tr>
+task is running, and will be destroyed after method <a class="el" href="a00261.html#a1">execute()</a> completes. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="w8w3" doxytag="reexecute"></a>reexecute</em> </td><td>
task to be rescheduled. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="w8w4" doxytag="ready"></a>ready</em> </td><td>
@@ -307,7 +321,7 @@ The resulting depth must be non-negative. </td>
<tr>
<td class="md" nowrap valign="top">internal::allocate_additional_child_of_proxy tbb::task::allocate_additional_child_of </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html">task</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>t</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
@@ -358,15 +372,45 @@ Returns proxy for overloaded new that allocates a continuation task of *this.
The continuation's parent becomes the parent of *this. </td>
</tr>
</table>
+<a class="anchor" name="a27" doxytag="tbb::task::cancel_group_execution"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">bool tbb::task::cancel_group_execution </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise. * </dd></dl>
+ </td>
+ </tr>
+</table>
<a class="anchor" name="a5" doxytag="tbb::task::destroy"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void tbb::task::destroy </td>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_METHOD tbb::task::destroy </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html">task</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>victim</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap></td>
@@ -385,7 +429,7 @@ The continuation's parent becomes the parent of *this. </td>
<p>
Destroy a task.
<p>
-Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00228.html#a1">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all. </td>
+Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00261.html#a1">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all. </td>
</tr>
</table>
<a class="anchor" name="a26" doxytag="tbb::task::note_affinity"></a><p>
@@ -394,9 +438,9 @@ Usually, calling this method is unnecessary, because a task is implicitly delete
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">virtual void tbb::task::note_affinity </td>
+ <td class="md" nowrap valign="top">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html#w1">affinity_id</a> </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html#w1">affinity_id</a> </td>
<td class="mdname1" valign="top" nowrap> <em>id</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [virtual]</code></td>
@@ -415,7 +459,7 @@ Usually, calling this method is unnecessary, because a task is implicitly delete
<p>
Invoked by scheduler to notify task that it ran on unexpected thread.
<p>
-Invoked before method <a class="el" href="a00228.html#a1">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
+Invoked before method <a class="el" href="a00261.html#a1">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
The default action does nothing. </td>
</tr>
</table>
@@ -445,7 +489,7 @@ The default action does nothing. </td>
<p>
Change this to be a continuation of its former self.
<p>
-The caller must guarantee that the task's refcount does not become zero until after the method <a class="el" href="a00228.html#a1">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00228.html#a1">execute()</a> return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.<p>
+The caller must guarantee that the task's refcount does not become zero until after the method <a class="el" href="a00261.html#a1">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00261.html#a1">execute()</a> return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.<p>
Because of the hazard, this method may be deprecated in the future. </td>
</tr>
</table>
@@ -502,7 +546,7 @@ For safety, it requires additional increment of ref_count. </td>
<td>
<p>
-Schedule this for reexecution after current <a class="el" href="a00228.html#a1">execute()</a> returns.
+Schedule this for reexecution after current <a class="el" href="a00261.html#a1">execute()</a> returns.
<p>
Requires that this.execute() be running. </td>
</tr>
@@ -515,7 +559,7 @@ Requires that this.execute() be running. </td>
<tr>
<td class="md" nowrap valign="top">void tbb::task::set_depth </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html#w0">depth_type</a> </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html#w0">depth_type</a> </td>
<td class="mdname1" valign="top" nowrap> <em>new_depth</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
@@ -545,7 +589,7 @@ The depth must be non-negative </td>
<tr>
<td class="md" nowrap valign="top">void tbb::task::spawn </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00229.html">task_list</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00263.html">task_list</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>list</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
@@ -575,7 +619,7 @@ All of the tasks must be at the same depth. </td>
<tr>
<td class="md" nowrap valign="top">void tbb::task::spawn </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html">task</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>child</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline]</code></td>
@@ -594,10 +638,10 @@ All of the tasks must be at the same depth. </td>
<p>
Schedule task for execution when a worker becomes available.
<p>
-After all children spawned so far finish their method <a class="el" href="a00228.html#a1">task::execute</a>, their parent's method <a class="el" href="a00228.html#a1">task::execute</a> may start running. Therefore, it is important to ensure that at least one child has not completed until the parent is ready to run. </td>
+After all children spawned so far finish their method <a class="el" href="a00261.html#a1">task::execute</a>, their parent's method <a class="el" href="a00261.html#a1">task::execute</a> may start running. Therefore, it is important to ensure that at least one child has not completed until the parent is ready to run. </td>
</tr>
</table>
-<a class="anchor" name="e2" doxytag="tbb::task::spawn_root_and_wait"></a><p>
+<a class="anchor" name="e3" doxytag="tbb::task::spawn_root_and_wait"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
@@ -605,7 +649,7 @@ After all children spawned so far finish their method <a class="el" href="a00228
<tr>
<td class="md" nowrap valign="top">void tbb::task::spawn_root_and_wait </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00229.html">task_list</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00263.html">task_list</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>root_list</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline, static]</code></td>
@@ -627,7 +671,7 @@ Spawn root tasks on list and wait for all of them to finish.
If there are more tasks than worker threads, the tasks are spawned in order of front to back. </td>
</tr>
</table>
-<a class="anchor" name="e1" doxytag="tbb::task::spawn_root_and_wait"></a><p>
+<a class="anchor" name="e2" doxytag="tbb::task::spawn_root_and_wait"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
@@ -635,7 +679,7 @@ If there are more tasks than worker threads, the tasks are spawned in order of f
<tr>
<td class="md" nowrap valign="top">void tbb::task::spawn_root_and_wait </td>
<td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="a00228.html">task</a> & </td>
+ <td class="md" nowrap valign="top"><a class="el" href="a00261.html">task</a> & </td>
<td class="mdname1" valign="top" nowrap> <em>root</em> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap><code> [inline, static]</code></td>
@@ -687,10 +731,10 @@ Works on tasks while waiting. </td>
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00349.html">task.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00262.html b/doc/html/a00262.html
new file mode 100644
index 0000000..270afe0
--- /dev/null
+++ b/doc/html/a00262.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::task_group_context Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::task_group_context Class Reference</h1>Used to form groups of tasks.
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00349.html">task.h</a>></code>
+<p>
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
+<p>
+Inheritance diagram for tbb::task_group_context:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00120.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b>kind_type</b> { <b>isolated</b>,
+<b>bound</b>
+ }</td></tr>
+
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a0">task_group_context</a> (kind_type relation_with_parent=bound)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default & binding constructor. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a2">reset</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Forcefully reinitializes context object after an algorithm it was used with finished. <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a3">cancel_group_execution</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups. <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::task_group_context::is_group_execution_cancelled"></a>
+bool __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a4">is_group_execution_cancelled</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#b0">init</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Out-of-line part of the constructor. <a href="#b0"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::task_group_context::task"></a>
+class </td><td class="memItemRight" valign="bottom"><b>task</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::task_group_context::internal::allocate_root_with_context_proxy"></a>
+class </td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Used to form groups of tasks.
+<p>
+The context services explicit cancellation requests from user code, and unhandled exceptions intercepted during tasks execution. Intercepting an exception results in generating internal cancellation requests (which is processed in exactly the same way as external ones).<p>
+The context is associated with one or more root tasks and defines the cancellation group that includes all the descendants of the corresponding root task(s). Association is established when a context object is passed as an argument to the <a class="el" href="a00261.html#e0">task::allocate_root()</a> method. See <a class="el" href="a00262.html#a0">task_group_context::task_group_context</a> for more details.<p>
+The context can be bound to another one, and other contexts can be bound to it, forming a tree-like structure: parent -> this -> children. Arrows here designate cancellation propagation direction. If a task in a cancellation group is canceled all the other tasks in this group and groups bound to it (as children) get canceled too. *
+<p>
+<hr><h2>Constructor & Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="tbb::task_group_context::task_group_context"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">tbb::task_group_context::task_group_context </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">kind_type </td>
+ <td class="mdname1" valign="top" nowrap> <em>relation_with_parent</em> = <code>bound</code> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Default & binding constructor.
+<p>
+By default a bound context is created. That is this context will be bound (as child) to the context of the task calling task::allocate_root(this_context) method. Cancellation requests passed to the parent context are propagated to all the contexts bound to it.<p>
+If task_group_context::isolated is used as the argument, then the tasks associated with this context will never be affected by events in any other context.<p>
+Creating isolated context is involves much less overhead, but they have limited utility. Normally when an exception occur in an algorithm that has nested algorithms running one would want all the nested ones canceled as well. Such behavior requires nested algorithms to use bound contexts.<p>
+There is one good place where using isolated algorithms is beneficial. It is a master thread. That is if a particular algorithm is invoked directly from the master thread (not from a TBB task), supplying it with explicitly created isolated context will result in a faster algorithm startup. </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a3" doxytag="tbb::task_group_context::cancel_group_execution"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">bool __TBB_EXPORTED_METHOD tbb::task_group_context::cancel_group_execution </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise.</dd></dl>
+Note that canceling never fails. When false is returned, it just means that another thread (or this one) has already sent cancellation request to this context or to one of its ancestors (if this context is bound). It is guaranteed that when this method is called on the same context, true may be returned by at most one invocation. * </td>
+ </tr>
+</table>
+<a class="anchor" name="b0" doxytag="tbb::task_group_context::init"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_METHOD tbb::task_group_context::init </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [protected]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Out-of-line part of the constructor.
+<p>
+Separated to facilitate future support for backward binary compatibility. * </td>
+ </tr>
+</table>
+<a class="anchor" name="a2" doxytag="tbb::task_group_context::reset"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_METHOD tbb::task_group_context::reset </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Forcefully reinitializes context object after an algorithm it was used with finished.
+<p>
+Because the method assumes that the all the tasks that used to be associated with this context have already finished, you must be extremely careful to not invalidate the context while it is still in use somewhere in the task hierarchy.<p>
+IMPORTANT: It is assumed that this method is not used concurrently!<p>
+The method does not change the context's parent if it is set. * </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00349.html">task.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00229.html b/doc/html/a00263.html
similarity index 80%
copy from doc/html/a00229.html
copy to doc/html/a00263.html
index 55544ac..fa93735 100644
--- a/doc/html/a00229.html
+++ b/doc/html/a00263.html
@@ -4,39 +4,39 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::task_list Class Reference</h1>A list of children.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00349.html">task.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::task_list:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00107.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::task_list:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00124.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::task_list::task_list"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a0">task_list</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a0">task_list</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct empty list. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::task_list::~task_list"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a1">~task_list</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a1">~task_list</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys the list, but does not destroy the task objects. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::task_list::empty"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a2">empty</a> () const </td></tr>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a2">empty</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">True if list if empty; false otherwise. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task_list::push_back"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a3">push_back</a> (<a class="el" href="a00228.html">task</a> &<a class="el" href="a00228.html">task</a>)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a3">push_back</a> (<a class="el" href="a00261.html">task</a> &<a class="el" href="a00261.html">task</a>)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Push task onto back of list. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::task_list::pop_front"></a>
-<a class="el" href="a00228.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a4">pop_front</a> ()</td></tr>
+<a class="el" href="a00261.html">task</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a4">pop_front</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Pop the front task from the list. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::task_list::clear"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#a5">clear</a> ()</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html#a5">clear</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Clear the list. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
@@ -50,10 +50,10 @@ A list of children.
Used for method task::spawn_children
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00349.html">task.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00230.html b/doc/html/a00264.html
similarity index 87%
copy from doc/html/a00230.html
copy to doc/html/a00264.html
index f7084c5..ef339a4 100644
--- a/doc/html/a00230.html
+++ b/doc/html/a00264.html
@@ -4,20 +4,20 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::task_prefix Class Reference</h1>Memory prefix to a task object.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00307.html">task.h</a>></code>
+<code>#include <<a class="el" href="a00349.html">task.h</a>></code>
<p>
-<a href="a00104.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00119.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::task_prefix::tbb::task"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#n0">tbb::task</a></td></tr>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#n0">tbb::task</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::task_prefix::tbb::task_list"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#n1">tbb::task_list</a></td></tr>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#n1">tbb::task_list</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::internal::task_prefix::internal::scheduler"></a>
class </td><td class="memItemRight" valign="bottom"><b>internal::scheduler</b></td></tr>
@@ -41,10 +41,10 @@ Memory prefix to a task object.
This class is internal to the library. Do not reference it directly, except within the library itself. Fields are ordered in way that preserves backwards compatibility and yields good packing on typical 32-bit and 64-bit platforms.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00307.html">task.h</a></ul>
+<li><a class="el" href="a00349.html">task.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00231.html b/doc/html/a00265.html
similarity index 76%
copy from doc/html/a00231.html
copy to doc/html/a00265.html
index 111fb80..5b45507 100644
--- a/doc/html/a00231.html
+++ b/doc/html/a00265.html
@@ -4,53 +4,57 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::task_scheduler_init Class Reference</h1>Class representing reference to tbb scheduler.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00308.html">task_scheduler_init.h</a>></code>
+<code>#include <<a class="el" href="a00350.html">task_scheduler_init.h</a>></code>
<p>
-Inherits <a class="el" href="a00200.html">tbb::internal::no_copy</a>.
+Inherits <a class="el" href="a00230.html">tbb::internal::no_copy</a>.
<p>
-Inheritance diagram for tbb::task_scheduler_init:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00108.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::task_scheduler_init:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00125.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a0">initialize</a> (int number_of_threads=<a class="el" href="a00231.html#s0">automatic</a>)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a0">initialize</a> (int number_of_threads=<a class="el" href="a00265.html#s0">automatic</a>)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Ensure that scheduler exists for this thread. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a1">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a1">initialize</a> (int number_of_threads, stack_size_type thread_stack_size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">The overloaded method with stack size parameter. <a href="#a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::task_scheduler_init::terminate"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a2">terminate</a> ()</td></tr>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a2">terminate</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Inverse of method initialize. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::task_scheduler_init::task_scheduler_init"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a3">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00231.html#s0">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a3">task_scheduler_init</a> (int number_of_threads=<a class="el" href="a00265.html#s0">automatic</a>, stack_size_type thread_stack_size=0)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for default constructor followed by call to intialize(number_of_threads). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::task_scheduler_init::~task_scheduler_init"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#a4">~task_scheduler_init</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a4">~task_scheduler_init</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy scheduler for this thread if thread has no other live task_scheduler_inits. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::task_scheduler_init::is_active"></a>
+bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a5">is_active</a> () const </td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if scheduler is active (initialized); false otherwise. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#e0">default_num_threads</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#e0">default_num_threads</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of threads tbb scheduler would create if initialized by default. <a href="#e0"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::task_scheduler_init::automatic"></a>
-const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#s0">automatic</a> = -1</td></tr>
+const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#s0">automatic</a> = -1</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for number of threads that is automatic. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s1" doxytag="tbb::task_scheduler_init::deferred"></a>
-const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#s1">deferred</a> = -2</td></tr>
+const int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#s1">deferred</a> = -2</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00231.html#a0">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Argument to <a class="el" href="a00265.html#a0">initialize()</a> or constructor that causes initialization to be deferred. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Class representing reference to tbb scheduler.
<p>
-A thread must construct a <a class="el" href="a00231.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task.
+A thread must construct a <a class="el" href="a00265.html">task_scheduler_init</a>, and keep it alive, during the time that it uses the services of class task.
<p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="e0" doxytag="tbb::task_scheduler_init::default_num_threads"></a><p>
@@ -59,7 +63,7 @@ A thread must construct a <a class="el" href="a00231.html">task_scheduler_init</
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">int tbb::task_scheduler_init::default_num_threads </td>
+ <td class="md" nowrap valign="top">int __TBB_EXPORTED_FUNC tbb::task_scheduler_init::default_num_threads </td>
<td class="md" valign="top">( </td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top"> ) </td>
@@ -89,7 +93,7 @@ Because tbb 2.0 does not support blocking tasks yet, you may use this method to
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void tbb::task_scheduler_init::initialize </td>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
<td class="md" valign="top">( </td>
<td class="md" nowrap valign="top">int </td>
<td class="mdname" nowrap> <em>number_of_threads</em>, </td>
@@ -128,10 +132,10 @@ Overloading is necessary to preserve ABI compatibility </td>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void tbb::task_scheduler_init::initialize </td>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_METHOD tbb::task_scheduler_init::initialize </td>
<td class="md" valign="top">( </td>
<td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>number_of_threads</em> = <code><a class="el" href="a00231.html#s0">automatic</a></code> </td>
+ <td class="mdname1" valign="top" nowrap> <em>number_of_threads</em> = <code><a class="el" href="a00265.html#s0">automatic</a></code> </td>
<td class="md" valign="top"> ) </td>
<td class="md" nowrap></td>
</tr>
@@ -154,10 +158,10 @@ The number_of_threads is ignored if any other task_scheduler_inits currently exi
</tr>
</table>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00308.html">task_scheduler_init.h</a></ul>
+<li><a class="el" href="a00350.html">task_scheduler_init.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00232.html b/doc/html/a00266.html
similarity index 85%
copy from doc/html/a00232.html
copy to doc/html/a00266.html
index 0a9b0cc..3c54c19 100644
--- a/doc/html/a00232.html
+++ b/doc/html/a00266.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::tbb_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_allocator< T > Class Template Reference</h1>Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00310.html">tbb_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00352.html">tbb_allocator.h</a>></code>
<p>
-<a href="a00110.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00127.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::tbb_allocator::pointer"></a>
@@ -34,18 +34,18 @@ typedef size_t </td><td class="memItemRight" valign="bottom"><b>size_type</
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w6" doxytag="tbb::tbb_allocator::difference_type"></a>
typedef ptrdiff_t </td><td class="memItemRight" valign="bottom"><b>difference_type</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#w9">malloc_type</a> { <b>scalable</b>,
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#w9">malloc_type</a> { <b>scalable</b>,
<b>standard</b>
}</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies current allocator. <br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::tbb_allocator::tbb_allocator"></a>
- </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00232.html">tbb_allocator</a> &) throw ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00266.html">tbb_allocator</a> &) throw ()</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::tbb_allocator::tbb_allocator"></a>
template<typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00232.html">tbb_allocator</a>< U > &) throw ()</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>tbb_allocator</b> (const <a class="el" href="a00266.html">tbb_allocator</a>< U > &) throw ()</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::tbb_allocator::address"></a>
pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (reference x) const </td></tr>
@@ -54,28 +54,28 @@ pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (refer
const_pointer </td><td class="memItemRight" valign="bottom"><b>address</b> (const_reference x) const </td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::tbb_allocator::allocate"></a>
-pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a5">allocate</a> (size_type n, const void *=0)</td></tr>
+pointer </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a5">allocate</a> (size_type n, const void *=0)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects, starting on a cache/sector line. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate space for n objects. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::tbb_allocator::deallocate"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a6">deallocate</a> (pointer p, size_type)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free block of memory that starts on a cache line. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free previously allocated block of memory. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::tbb_allocator::max_size"></a>
-size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a7">max_size</a> () const throw ()</td></tr>
+size_type </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a7">max_size</a> () const throw ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Largest value for which method allocate might succeed. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::tbb_allocator::construct"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a8">construct</a> (pointer p, const T &value)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a8">construct</a> (pointer p, const T &value)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Copy-construct value at location pointed to by p. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::tbb_allocator::destroy"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#a9">destroy</a> (pointer p)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a9">destroy</a> (pointer p)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy value at location pointed to by p. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::tbb_allocator::allocator_type"></a>
-<a class="el" href="a00232.html#w9">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#e0">allocator_type</a> ()</td></tr>
+<a class="el" href="a00266.html#w9">malloc_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#e0">allocator_type</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns current allocator. <br></td></tr>
</table>
@@ -83,15 +83,15 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="a002
<h3>template<typename T><br>
class tbb::tbb_allocator< T ></h3>
-Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
<p>
The class selects the best memory allocation mechanism available from scalable_malloc and standard malloc. The members are ordered the same way they are in section 20.4.1 of the ISO C++ standard.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00310.html">tbb_allocator.h</a></ul>
+<li><a class="el" href="a00352.html">tbb_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00173.html b/doc/html/a00267.html
similarity index 67%
rename from doc/html/a00173.html
rename to doc/html/a00267.html
index 3a975d8..1e90846 100644
--- a/doc/html/a00173.html
+++ b/doc/html/a00267.html
@@ -1,39 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::cache_aligned_allocator< void > Class Template Reference</title>
+<title>tbb::tbb_allocator< void > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::cache_aligned_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_allocator< void > Class Template Reference</h1>Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00288.html">cache_aligned_allocator.h</a>></code>
+<code>#include <<a class="el" href="a00352.html">tbb_allocator.h</a>></code>
<p>
-<a href="a00018.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00129.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::cache_aligned_allocator< void >::pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::tbb_allocator< void >::pointer"></a>
typedef void * </td><td class="memItemRight" valign="bottom"><b>pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::cache_aligned_allocator< void >::const_pointer"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::tbb_allocator< void >::const_pointer"></a>
typedef const void * </td><td class="memItemRight" valign="bottom"><b>const_pointer</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::cache_aligned_allocator< void >::value_type"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w2" doxytag="tbb::tbb_allocator< void >::value_type"></a>
typedef void </td><td class="memItemRight" valign="bottom"><b>value_type</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<><br>
- class tbb::cache_aligned_allocator< void ></h3>
+ class tbb::tbb_allocator< void ></h3>
Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00288.html">cache_aligned_allocator.h</a></ul>
+<li><a class="el" href="a00352.html">tbb_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00268.html b/doc/html/a00268.html
new file mode 100644
index 0000000..57182ae
--- /dev/null
+++ b/doc/html/a00268.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb::tbb_exception Class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_exception Class Reference</h1>Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.
+<a href="#_details">More...</a>
+<p>
+<code>#include <<a class="el" href="a00353.html">tbb_exception.h</a>></code>
+<p>
+Inherited by <a class="el" href="a00200.html">tbb::captured_exception</a>, and <a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>.
+<p>
+Inheritance diagram for tbb::tbb_exception:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00132.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="a00268.html">tbb_exception</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a0">move</a> ()=0 throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Creates and returns pointer to the deep copy of this exception object. <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a1">destroy</a> ()=0 throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Destroys objects created by the <a class="el" href="a00268.html#a0">move()</a> method. <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a2">throw_self</a> ()=0</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Throws this exception object. <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::tbb_exception::name"></a>
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a3">name</a> () const =0 throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns RTTI name of the originally intercepted exception. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::tbb_exception::what"></a>
+virtual const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a4">what</a> () const =0 throw ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the result of originally intercepted exception's <a class="el" href="a00268.html#a4">what()</a> method. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Interface to be implemented by all exceptions TBB recognizes and propagates across the threads.
+<p>
+If an unhandled exception of the type derived from tbb::tbb_exception is intercepted by the TBB scheduler in one of the worker threads, it is delivered to and re-thrown in the root thread. The root thread is the thread that has started the outermost algorithm or root task sharing the same <a class="el" href="a00262.html">task_group_context</a> with the guilty algorithm/task (the one that threw the exception first).<p>
+Note: when documentation mentions workers with respect to exception handling, masters are implied as well, because they are completely equivalent in this context. Consequently a root thread can be master or worker thread.<p>
+NOTE: In case of nested algorithms or complex task hierarchies when the nested levels share (explicitly or by means of implicit inheritance) the task group context of the outermost level, the exception may be (re-)thrown multiple times (ultimately - in each worker on each nesting level) before reaching the root thread at the outermost level. IMPORTANT: if you intercept an exception derived from this class on a nested level, you must re-throw it in the catch block by means of the "throw;" [...]
+TBB provides two implementations of this interface: <a class="el" href="a00200.html">tbb::captured_exception</a> and template class <a class="el" href="a00226.html">tbb::movable_exception</a>. See their declarations for more info. *
+<p>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a1" doxytag="tbb::tbb_exception::destroy"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual void tbb::tbb_exception::destroy </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [pure virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Destroys objects created by the <a class="el" href="a00268.html#a0">move()</a> method.
+<p>
+Frees memory and calls destructor for this exception object. Can and must be used only on objects created by the move method. *
+<p>
+Implemented in <a class="el" href="a00200.html#a5">tbb::captured_exception</a>, and <a class="el" href="a00226.html#a9">tbb::movable_exception< ExceptionData ></a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a0" doxytag="tbb::tbb_exception::move"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual <a class="el" href="a00268.html">tbb_exception</a>* tbb::tbb_exception::move </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap> throw ()<code> [pure virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Creates and returns pointer to the deep copy of this exception object.
+<p>
+Move semantics is allowed. *
+<p>
+Implemented in <a class="el" href="a00200.html#a4">tbb::captured_exception</a>, and <a class="el" href="a00226.html#a8">tbb::movable_exception< ExceptionData ></a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="a2" doxytag="tbb::tbb_exception::throw_self"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">virtual void tbb::tbb_exception::throw_self </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap><code> [pure virtual]</code></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Throws this exception object.
+<p>
+Make sure that if you have several levels of derivation from this interface you implement or override this method on the most derived level. The implementation is as simple as "throw *this;". Failure to do this will result in exception of a base class type being thrown. *
+<p>
+Implemented in <a class="el" href="a00200.html#a6">tbb::captured_exception</a>, and <a class="el" href="a00226.html#a10">tbb::movable_exception< ExceptionData ></a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00353.html">tbb_exception.h</a></ul>
+<hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00179.html b/doc/html/a00269.html
similarity index 54%
rename from doc/html/a00179.html
rename to doc/html/a00269.html
index 2b88379..d82cf7d 100644
--- a/doc/html/a00179.html
+++ b/doc/html/a00269.html
@@ -1,33 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::concurrent_queue_base_v3::page Struct Reference</title>
+<title>tbb::tbb_hash_compare< T > Struct Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::concurrent_queue_base_v3::page Struct Reference</h1>Prefix on a page.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::tbb_hash_compare< T > Struct Template Reference</h1>hash_compare - default argument
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00290.html">concurrent_queue.h</a>></code>
+<code>#include <<a class="el" href="a00329.html">concurrent_hash_map.h</a>></code>
<p>
-<a href="a00031.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00026.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="tbb::internal::concurrent_queue_base_v3::page::next"></a>
-<a class="el" href="a00179.html">page</a> * </td><td class="memItemRight" valign="bottom"><b>next</b></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::tbb_hash_compare::hash"></a>
+<a class="el" href="a00319.html#a2">internal::hashcode_t</a> </td><td class="memItemRight" valign="bottom"><b>hash</b> (const T &t)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="tbb::internal::concurrent_queue_base_v3::page::mask"></a>
-<a class="el" href="a00279.html#a13">uintptr</a> </td><td class="memItemRight" valign="bottom"><b>mask</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e1" doxytag="tbb::tbb_hash_compare::equal"></a>
+bool </td><td class="memItemRight" valign="bottom"><b>equal</b> (const T &a, const T &b)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-Prefix on a page.
+<h3>template<typename T><br>
+ struct tbb::tbb_hash_compare< T ></h3>
+
+hash_compare - default argument
<p>
<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00290.html">concurrent_queue.h</a></ul>
+<li><a class="el" href="a00329.html">concurrent_hash_map.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00234.html b/doc/html/a00270.html
similarity index 71%
copy from doc/html/a00234.html
copy to doc/html/a00270.html
index 2ab1f9b..4c09df2 100644
--- a/doc/html/a00234.html
+++ b/doc/html/a00270.html
@@ -4,76 +4,82 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::tbb_thread_v3 Class Reference</h1>Versioned thread class.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00314.html">tbb_thread.h</a>></code>
+<code>#include <<a class="el" href="a00357.html">tbb_thread.h</a>></code>
<p>
-<a href="a00128.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00151.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::tbb_thread_v3::native_handle_type"></a>
+typedef HANDLE </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w1" doxytag="tbb::internal::tbb_thread_v3::native_handle_type"></a>
typedef pthread_t </td><td class="memItemRight" valign="bottom"><b>native_handle_type</b></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a0">tbb_thread_v3</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a0">tbb_thread_v3</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs a thread object that does not represent a thread of execution. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a1" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
template<class F> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a1">tbb_thread_v3</a> (F f)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00270.html#a1">tbb_thread_v3</a> (F f)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f() in a new thread. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a2" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
template<class F, class X> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a2">tbb_thread_v3</a> (F f, X x)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00270.html#a2">tbb_thread_v3</a> (F f, X x)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x) in a new thread. <br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a3" doxytag="tbb::internal::tbb_thread_v3::tbb_thread_v3"></a>
template<class F, class X, class Y> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00234.html#a3">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00270.html#a3">tbb_thread_v3</a> (F f, X x, Y y)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Constructs an object and executes f(x,y) in a new thread. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::tbb_thread_v3::joinable"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::tbb_thread_v3::operator="></a>
+<a class="el" href="a00270.html">tbb_thread_v3</a> & </td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="a00270.html">tbb_thread_v3</a> &x)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::tbb_thread_v3::joinable"></a>
bool </td><td class="memItemRight" valign="bottom"><b>joinable</b> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::tbb_thread_v3::join"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a5">join</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::tbb_thread_v3::join"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a6">join</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The completion of the thread represented by *this happens before <a class="el" href="a00234.html#a5">join()</a> returns. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::tbb_thread_v3::detach"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#a6">detach</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The completion of the thread represented by *this happens before <a class="el" href="a00270.html#a6">join()</a> returns. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::tbb_thread_v3::detach"></a>
+void __TBB_EXPORTED_METHOD </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a7">detach</a> ()</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">When <a class="el" href="a00234.html#a6">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::tbb_thread_v3::get_id"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">When <a class="el" href="a00270.html#a7">detach()</a> returns, *this no longer represents the possibly continuing thread of execution. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::tbb_thread_v3::get_id"></a>
id </td><td class="memItemRight" valign="bottom"><b>get_id</b> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::tbb_thread_v3::native_handle"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::tbb_thread_v3::native_handle"></a>
native_handle_type </td><td class="memItemRight" valign="bottom"><b>native_handle</b> ()</td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::tbb_thread_v3::hardware_concurrency"></a>
-unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#e0">hardware_concurrency</a> ()</td></tr>
+unsigned __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#e0">hardware_concurrency</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">The number of hardware thread contexts. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::tbb_thread_v3::move_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00270.html">tbb_thread_v3</a> &t1, <a class="el" href="a00270.html">tbb_thread_v3</a> &t2)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::tbb_thread_v3::tbb::swap"></a>
-void </td><td class="memItemRight" valign="bottom"><b>tbb::swap</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
+void </td><td class="memItemRight" valign="bottom"><b>tbb::swap</b> (<a class="el" href="a00270.html">tbb_thread_v3</a> &t1, <a class="el" href="a00270.html">tbb_thread_v3</a> &t2)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Versioned thread class.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00314.html">tbb_thread.h</a></ul>
+<li><a class="el" href="a00357.html">tbb_thread.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00235.html b/doc/html/a00271.html
similarity index 87%
copy from doc/html/a00235.html
copy to doc/html/a00271.html
index 81f50ca..0adfe66 100644
--- a/doc/html/a00235.html
+++ b/doc/html/a00271.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::thread_closure_1< F, X > Struct Template Reference</h1>Structure used to pass user function with 1 argument to thread.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00314.html">tbb_thread.h</a>></code>
+<code>#include <<a class="el" href="a00357.html">tbb_thread.h</a>></code>
<p>
-<a href="a00126.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00149.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::thread_closure_1::thread_closure_1"></a>
@@ -18,7 +18,7 @@
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::internal::thread_closure_1::start_routine"></a>
-__TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#e0">start_routine</a> (void *c)</td></tr>
+__TBB_NATIVE_THREAD_ROUTINE </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html#e0">start_routine</a> (void *c)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Routine passed to Windows's _beginthreadex by thread::internal_start() inside tbb.dll. <br></td></tr>
<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
@@ -36,10 +36,10 @@ X </td><td class="memItemRight" valign="bottom"><b>arg1</b></td></tr>
Structure used to pass user function with 1 argument to thread.
<p>
<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00314.html">tbb_thread.h</a></ul>
+<li><a class="el" href="a00357.html">tbb_thread.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00236.html b/doc/html/a00272.html
similarity index 75%
copy from doc/html/a00236.html
copy to doc/html/a00272.html
index ff70d2e..9094d54 100644
--- a/doc/html/a00236.html
+++ b/doc/html/a00272.html
@@ -4,27 +4,27 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::tick_count Class Reference</h1>Absolute timestamp.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00315.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00358.html">tick_count.h</a>></code>
<p>
-<a href="a00130.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00153.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::tick_count::tick_count"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#a0">tick_count</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#a0">tick_count</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct an absolute timestamp initialized to zero. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0" doxytag="tbb::tick_count::now"></a>
-<a class="el" href="a00236.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#e0">now</a> ()</td></tr>
+<a class="el" href="a00272.html">tick_count</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#e0">now</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Return current time. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::tick_count::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#n0">operator-</a> (const <a class="el" href="a00236.html">tick_count</a> &t1, const <a class="el" href="a00236.html">tick_count</a> &t0)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#n0">operator-</a> (const <a class="el" href="a00272.html">tick_count</a> &t1, const <a class="el" href="a00272.html">tick_count</a> &t0)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two timestamps to get the time interval between. <br></td></tr>
</table>
@@ -32,10 +32,10 @@
Absolute timestamp.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00315.html">tick_count.h</a></ul>
+<li><a class="el" href="a00358.html">tick_count.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00237.html b/doc/html/a00273.html
similarity index 72%
copy from doc/html/a00237.html
copy to doc/html/a00273.html
index ebb972e..e61a575 100644
--- a/doc/html/a00237.html
+++ b/doc/html/a00273.html
@@ -4,49 +4,49 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::tick_count::interval_t Class Reference</h1>Relative time interval.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00315.html">tick_count.h</a>></code>
+<code>#include <<a class="el" href="a00358.html">tick_count.h</a>></code>
<p>
-<a href="a00131.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00154.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::tick_count::interval_t::interval_t"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a0">interval_t</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a0">interval_t</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing zero time duration. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::tick_count::interval_t::interval_t"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a1">interval_t</a> (double sec)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a1">interval_t</a> (double sec)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Construct a time interval representing sec seconds time duration. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::tick_count::interval_t::seconds"></a>
-double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a2">seconds</a> () const </td></tr>
+double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a2">seconds</a> () const </td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Return the length of a time interval in seconds. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::tick_count::interval_t::operator+="></a>
-<a class="el" href="a00237.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a3">operator+=</a> (const <a class="el" href="a00237.html">interval_t</a> &i)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a3">operator+=</a> (const <a class="el" href="a00273.html">interval_t</a> &i)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Accumulation operator. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::tick_count::interval_t::operator-="></a>
-<a class="el" href="a00237.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#a4">operator-=</a> (const <a class="el" href="a00237.html">interval_t</a> &i)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a4">operator-=</a> (const <a class="el" href="a00273.html">interval_t</a> &i)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtraction operator. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::tick_count::interval_t::tbb::tick_count"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n0">tbb::tick_count</a></td></tr>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#n0">tbb::tick_count</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::tick_count::interval_t::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n1">operator-</a> (const <a class="el" href="a00236.html">tick_count</a> &t1, const <a class="el" href="a00236.html">tick_count</a> &t0)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#n1">operator-</a> (const <a class="el" href="a00272.html">tick_count</a> &t1, const <a class="el" href="a00272.html">tick_count</a> &t0)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Extract the intervals from the tick_counts and subtract them. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n2" doxytag="tbb::tick_count::interval_t::operator+"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n2">operator+</a> (const <a class="el" href="a00237.html">interval_t</a> &i, const <a class="el" href="a00237.html">interval_t</a> &j)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#n2">operator+</a> (const <a class="el" href="a00273.html">interval_t</a> &i, const <a class="el" href="a00273.html">interval_t</a> &j)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Add two intervals. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n3" doxytag="tbb::tick_count::interval_t::operator-"></a>
-<a class="el" href="a00237.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#n3">operator-</a> (const <a class="el" href="a00237.html">interval_t</a> &i, const <a class="el" href="a00237.html">interval_t</a> &j)</td></tr>
+<a class="el" href="a00273.html">interval_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#n3">operator-</a> (const <a class="el" href="a00273.html">interval_t</a> &i, const <a class="el" href="a00273.html">interval_t</a> &j)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two intervals. <br></td></tr>
</table>
@@ -54,10 +54,10 @@ class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00
Relative time interval.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00315.html">tick_count.h</a></ul>
+<li><a class="el" href="a00358.html">tick_count.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00238.html b/doc/html/a00274.html
similarity index 78%
copy from doc/html/a00238.html
copy to doc/html/a00274.html
index 9b74ef3..a91198c 100644
--- a/doc/html/a00238.html
+++ b/doc/html/a00274.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::vector_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::vector_iterator< Container, Value > Class Template Reference</h1>Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00195.html">blocked_range</a>.*/.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00291.html">concurrent_vector.h</a>></code>
+<code>#include <<a class="el" href="a00331.html">concurrent_vector.h</a>></code>
<p>
-<a href="a00039.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<a href="a00042.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="w0" doxytag="tbb::internal::vector_iterator::difference_type"></a>
@@ -30,47 +30,50 @@ typedef std::random_access_iterator_tag </td><td class="memItemRight" valig
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::vector_iterator::vector_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a0">vector_iterator</a> ()</td></tr>
+ </td><td class="memItemRight" valign="bottom"><b>vector_iterator</b> (const Container &vector, size_t index)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::vector_iterator::vector_iterator"></a>
- </td><td class="memItemRight" valign="bottom"><b>vector_iterator</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
+ </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a1">vector_iterator</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::vector_iterator::vector_iterator"></a>
+ </td><td class="memItemRight" valign="bottom"><b>vector_iterator</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, typename Container::value_type > &other)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::vector_iterator::operator+"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset) const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::vector_iterator::operator+"></a>
+<a class="el" href="a00274.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::vector_iterator::operator+="></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator+=</b> (ptrdiff_t offset)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::vector_iterator::operator+="></a>
+<a class="el" href="a00274.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><b>operator+=</b> (ptrdiff_t offset)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::vector_iterator::operator-"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (ptrdiff_t offset) const </td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::vector_iterator::operator-"></a>
+<a class="el" href="a00274.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (ptrdiff_t offset) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::vector_iterator::operator-="></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-=</b> (ptrdiff_t offset)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::vector_iterator::operator-="></a>
+<a class="el" href="a00274.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><b>operator-=</b> (ptrdiff_t offset)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::vector_iterator::operator *"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::vector_iterator::operator *"></a>
Value & </td><td class="memItemRight" valign="bottom"><b>operator *</b> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::vector_iterator::operator[]"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::vector_iterator::operator[]"></a>
Value & </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (ptrdiff_t k) const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::vector_iterator::operator->"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::vector_iterator::operator->"></a>
Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const </td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::vector_iterator::operator++"></a>
-<a class="el" href="a00238.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a9">operator++</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::vector_iterator::operator++"></a>
+<a class="el" href="a00274.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a10">operator++</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Pre increment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::vector_iterator::operator--"></a>
-<a class="el" href="a00238.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a10">operator--</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::internal::vector_iterator::operator--"></a>
+<a class="el" href="a00274.html">vector_iterator</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a11">operator--</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Pre decrement. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::internal::vector_iterator::operator++"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a11">operator++</a> (int)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::vector_iterator::operator++"></a>
+<a class="el" href="a00274.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a12">operator++</a> (int)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Post increment. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::vector_iterator::operator--"></a>
-<a class="el" href="a00238.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#a12">operator--</a> (int)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::internal::vector_iterator::operator--"></a>
+<a class="el" href="a00274.html">vector_iterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a13">operator--</a> (int)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Post decrement. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
@@ -78,38 +81,38 @@ Value * </td><td class="memItemRight" valign="bottom"><b>operator-></b>
class </td><td class="memItemRight" valign="bottom"><b>internal::vector_iterator</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n1" doxytag="tbb::internal::vector_iterator::tbb::concurrent_vector"></a>
-class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#n1">tbb::concurrent_vector</a></td></tr>
+class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#n1">tbb::concurrent_vector</a></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n2" doxytag="tbb::internal::vector_iterator::operator+"></a>
template<typename C, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00238.html">vector_iterator</a>< C, T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &v)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00274.html">vector_iterator</a>< C, T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00274.html">vector_iterator</a>< C, T > &v)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n3" doxytag="tbb::internal::vector_iterator::operator=="></a>
template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00274.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< C, U > &j)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n4" doxytag="tbb::internal::vector_iterator::operator<"></a>
template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00274.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< C, U > &j)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="n5" doxytag="tbb::internal::vector_iterator::operator-"></a>
template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00238.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00274.html">vector_iterator</a>< C, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< C, U > &j)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template<typename Container, typename Value><br>
class tbb::internal::vector_iterator< Container, Value ></h3>
-Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/.
+Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00195.html">blocked_range</a>.*/.
<p>
Value is either the T or const T type of the container.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00291.html">concurrent_vector.h</a></ul>
+<li><a class="el" href="a00331.html">concurrent_vector.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00165.html b/doc/html/a00275.html
similarity index 67%
rename from doc/html/a00165.html
rename to doc/html/a00275.html
index 559cbeb..9aa5a74 100644
--- a/doc/html/a00165.html
+++ b/doc/html/a00275.html
@@ -1,31 +1,23 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::atomic< T > Struct Template Reference</title>
+<title>tbb::internal::version_tag_v3 Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::atomic< T > Struct Template Reference</h1>Primary template for atomic.
-<a href="#_details">More...</a>
-<p>
-<code>#include <<a class="el" href="a00284.html">atomic.h</a>></code>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::version_tag_v3 Struct Reference</h1><code>#include <<a class="el" href="a00356.html">tbb_stddef.h</a>></code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename T><br>
- struct tbb::atomic< T ></h3>
-
-Primary template for atomic.
-<p>
-See the Reference for details.
+Version tag can be necessary to prevent loader on Linux from using the wrong symbol in debug builds (when inline functions are compiled as out-of-line). *
<p>
<hr>The documentation for this struct was generated from the following file:<ul>
-<li><a class="el" href="a00284.html">atomic.h</a></ul>
+<li><a class="el" href="a00356.html">tbb_stddef.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00185.html b/doc/html/a00276.html
similarity index 55%
rename from doc/html/a00185.html
rename to doc/html/a00276.html
index 9ff48db..947a959 100644
--- a/doc/html/a00185.html
+++ b/doc/html/a00276.html
@@ -1,40 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal::do_group_task_forward< Iterator, Body, Item > Class Template Reference</title>
+<title>tbb::internal::while_group_task< Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::do_group_task_forward< Iterator, Body, Item > Class Template Reference<br>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::while_group_task< Body > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00293.html">parallel_do.h</a>></code>
+<code>#include <<a class="el" href="a00340.html">parallel_while.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::do_group_task_forward< Iterator, Body, Item >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00059.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::while_group_task< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00085.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::do_group_task_forward::do_task_iter"></a>
-class </td><td class="memItemRight" valign="bottom"><b>do_task_iter</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_group_task::while_task"></a>
+class </td><td class="memItemRight" valign="bottom"><b>while_task</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-<h3>template<typename Iterator, typename Body, typename Item><br>
- class tbb::internal::do_group_task_forward< Iterator, Body, Item ></h3>
+<h3>template<typename Body><br>
+ class tbb::internal::while_group_task< Body ></h3>
For internal use only.
<p>
Unpacks a block of iterations.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00293.html">parallel_do.h</a></ul>
+<li><a class="el" href="a00340.html">parallel_while.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00241.html b/doc/html/a00277.html
similarity index 82%
copy from doc/html/a00241.html
copy to doc/html/a00277.html
index 91b3c3c..ac5fb86 100644
--- a/doc/html/a00241.html
+++ b/doc/html/a00277.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal::while_iteration_task< Body > Class Template Reference<br>
<small>
-[<a class="el" href="a00281.html">Algorithms</a>]</small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<code>#include <<a class="el" href="a00298.html">parallel_while.h</a>></code>
+<code>#include <<a class="el" href="a00340.html">parallel_while.h</a>></code>
<p>
-Inherits <a class="el" href="a00228.html">tbb::task</a>.
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
<p>
-Inheritance diagram for tbb::internal::while_iteration_task< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+Inheritance diagram for tbb::internal::while_iteration_task< Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00084.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_iteration_task::while_group_task"></a>
@@ -34,10 +34,10 @@ For internal use only.
Executes one iteration of a while.
<p>
<hr>The documentation for this class was generated from the following file:<ul>
-<li><a class="el" href="a00298.html">parallel_while.h</a></ul>
+<li><a class="el" href="a00340.html">parallel_while.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00278.html b/doc/html/a00278.html
index 5053625..bb08bc9 100644
--- a/doc/html/a00278.html
+++ b/doc/html/a00278.html
@@ -1,381 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb Namespace Reference</title>
+<title>tbb::internal::while_task< Stream, Body > Class Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb Namespace Reference</h1>The namespace tbb contains all components of the library.
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::while_task< Stream, Body > Class Template Reference<br>
+<small>
+[<a class="el" href="a00321.html">Algorithms</a>]</small>
+</h1>For internal use only.
<a href="#_details">More...</a>
<p>
-<table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00340.html">parallel_while.h</a>></code>
+<p>
+Inherits <a class="el" href="a00261.html">tbb::task</a>.
+<p>
+Inheritance diagram for tbb::internal::while_task< Stream, Body >:<center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center><a href="a00086.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements. <a href="a00164.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">tbb::atomic< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic. <a href="a00165.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::atomic< T * ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::atomic< void * ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::atomic< bool ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate. <a href="a00169.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept. <a href="a00170.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept. <a href="a00171.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 <a href="a00172.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::cache_aligned_allocator< T >::rebind< U ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00173.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::cache_aligned_allocator< void >::rebind< U ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T. <a href="a00174.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection. <a href="a00176.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allows write access to elements and combines data access, locking, and garbage collection. <a href="a00175.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::node</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Basic unit of storage used in chain. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::chain</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A linked-list of nodes. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::segment</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Segment of the table. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe queue. <a href="a00177.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_queue< T, A >::destroyer</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class used to ensure exception-safety of method "pop". <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container <a href="a00182.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_vector< T, A >::generic_range_type< I ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_vector< T, A >::internal_loop_guide</b></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception-aware helper class for filling a segment by exception-danger operators of user class. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html">tbb::mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock. <a href="a00198.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00199.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks <a href="a00201.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html">tbb::pre_scan_tag</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed. <a href="a00207.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html">tbb::final_scan_tag</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed. <a href="a00190.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work. <a href="a00204.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html">tbb::simple_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner <a href="a00216.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::simple_partitioner::partition_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html">tbb::auto_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner. <a href="a00167.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::auto_partitioner::partition_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner. <a href="a00162.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">tbb::filter</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline. <a href="a00189.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html">tbb::pipeline</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items. <a href="a00206.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html">tbb::queuing_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning. <a href="a00208.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00209.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning. <a href="a00210.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00211.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html">tbb::recursive_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition. <a href="a00214.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00215.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">tbb::spin_mutex</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte. <a href="a00217.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex. <a href="a00218.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference. <a href="a00219.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00220.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html">tbb::task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks. <a href="a00228.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html">tbb::empty_task</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization. <a href="a00188.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html">tbb::task_list</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children. <a href="a00229.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler. <a href="a00231.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 <a href="a00232.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::tbb_allocator< T >::rebind< U ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00233.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::tbb_allocator< void >::rebind< U ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">tbb::bad_last_alloc</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers. <a href="a00168.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">tbb::split</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor. <a href="a00221.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">tbb::tick_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp. <a href="a00236.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval. <a href="a00237.html#_details">More...</a><br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga3" doxytag="tbb::parallel_do"></a>
-template<typename Iterator, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga3">parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_for</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_for_body_req.html">parallel_for Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga4" doxytag="tbb::parallel_for"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga4">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00216.html">simple_partitioner</a> &partitioner=<a class="el" href="a00216.html">simple_partitioner</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner, or default partitioner if no partitioner is specified. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga5" doxytag="tbb::parallel_for"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00167.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga6" doxytag="tbb::parallel_for"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga6">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00162.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00162.html">affinity_partitioner</a>. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_reduce</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_reduce_body_req.html">parallel_reduce Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7" doxytag="tbb::parallel_reduce"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga7">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00216.html">simple_partitioner</a> &partitioner=<a class="el" href="a00216.html">simple_partitioner</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00216.html">simple_partitioner</a>, or default partitioner if no partitioner is specified. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga8" doxytag="tbb::parallel_reduce"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga8">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00167.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga9" doxytag="tbb::parallel_reduce"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga9">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00162.html">affinity_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga10" doxytag="tbb::parallel_scan"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga10">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00216.html">simple_partitioner</a> &partitioner=<a class="el" href="a00216.html">simple_partitioner</a>())</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00216.html">simple_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga11" doxytag="tbb::parallel_scan"></a>
-template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga11">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00167.html">auto_partitioner</a> &partitioner)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td colspan="2"><br><h2>parallel_sort</h2></td></tr>
-<tr><td colspan="2">See also requirements on <a class="el" href="parallel_sort_iter_req.html">iterators for parallel_sort</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename RandomAccessIterator, typename Compare> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga13">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator. <a href="a00281.html#ga13"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga14" doxytag="tbb::parallel_sort"></a>
-template<typename RandomAccessIterator> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga14">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga15" doxytag="tbb::parallel_sort"></a>
-template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga15">parallel_sort</a> (T *begin, T *end)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>. <br></td></tr>
-<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_rw_mutex"></a>
-typedef <a class="el" href="a00219.html">spin_rw_mutex_v3</a> </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::stack_size_type"></a>
-typedef std::size_t </td><td class="memItemRight" valign="bottom"><b>stack_size_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::task_scheduler_observer"></a>
-typedef internal::task_scheduler_observer_v3 </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::assertion_handler_type"></a>
-typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a6">assertion_handler_type</a> )(const char *filename, int line, const char *expression, const char *comment)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for an assertion handler. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::tbb_thread"></a>
-typedef <a class="el" href="a00234.html">internal::tbb_thread_v3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a7">tbb_thread</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Users reference thread class by name tbb_thread. <br></td></tr>
-<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a37">memory_semantics</a> { <a class="el" href="a00278.html#a37a0">__TBB_full_fence</a>,
-<a class="el" href="a00278.html#a37a1">acquire</a>,
-<a class="el" href="a00278.html#a37a2">release</a>
- }</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing. <a href="#a37">More...</a><br></td></tr>
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a8" doxytag="tbb::operator=="></a>
-template<typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00172.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00172.html">cache_aligned_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a9" doxytag="tbb::operator!="></a>
-template<typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00172.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00172.html">cache_aligned_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a10" doxytag="tbb::operator=="></a>
-template<typename Key, typename T, typename HashCompare, typename A1, typename A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a11" doxytag="tbb::operator!="></a>
-template<typename Key, typename T, typename HashCompare, typename A1, typename A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a12" doxytag="tbb::swap"></a>
-template<typename Key, typename T, typename HashCompare, typename A> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00174.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a13" doxytag="tbb::operator=="></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a14" doxytag="tbb::operator!="></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a15" doxytag="tbb::operator<"></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a16" doxytag="tbb::operator>"></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a17" doxytag="tbb::operator<="></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a18" doxytag="tbb::operator>="></a>
-template<typename T, class A1, class A2> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00182.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00182.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a19" doxytag="tbb::swap"></a>
-template<typename T, class A> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00182.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00182.html">concurrent_vector</a>< T, A > &b)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a32" doxytag="tbb::operator=="></a>
-template<typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00232.html">tbb_allocator</a>< T > &, const <a class="el" href="a00232.html">tbb_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a33" doxytag="tbb::operator!="></a>
-template<typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00232.html">tbb_allocator</a>< T > &, const <a class="el" href="a00232.html">tbb_allocator</a>< U > &)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a34" doxytag="tbb::swap"></a>
-void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00234.html">internal::tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">internal::tbb_thread_v3</a> &t2)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a35" doxytag="tbb::move"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move</b> (<a class="el" href="a00234.html">tbb_thread</a> &t1, <a class="el" href="a00234.html">tbb_thread</a> &t2)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36" doxytag="tbb::operator-"></a>
-<a class="el" href="a00237.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00236.html">tick_count</a> &t1, const <a class="el" href="a00236.html">tick_count</a> &t0)</td></tr>
+<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="n0" doxytag="tbb::internal::while_task::tbb::parallel_while<Body>"></a>
+class </td><td class="memItemRight" valign="bottom"><b>tbb::parallel_while<Body></b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-The namespace tbb contains all components of the library. <hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a37" doxytag="tbb::memory_semantics"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="a00278.html#a37">memory_semantics</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<h3>template<typename Stream, typename Body><br>
+ class tbb::internal::while_task< Stream, Body ></h3>
+For internal use only.
<p>
-Specifies memory fencing.
+Gets block of iterations from a stream and packages them into a <a class="el" href="a00276.html">while_group_task</a>.
<p>
-<dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="a37a0" doxytag="__TBB_full_fence"></a>__TBB_full_fence</em> </td><td>
-For internal use only. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a37a1" doxytag="acquire"></a>acquire</em> </td><td>
-Acquire fence. </td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a37a2" doxytag="release"></a>release</em> </td><td>
-Release fence. </td></tr>
-</table>
-</dl>
- </td>
- </tr>
-</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a00340.html">parallel_while.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00279.html b/doc/html/a00279.html
index 45a8957..72c5374 100644
--- a/doc/html/a00279.html
+++ b/doc/html/a00279.html
@@ -1,665 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tbb::internal Namespace Reference</title>
+<title>tbb::internal::work_around_alignment_bug< Size, T > Struct Template Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal Namespace Reference</h1>INTERNAL
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb::internal::work_around_alignment_bug< Size, T > Struct Template Reference</h1>Work around for bug in GNU 3.2 and MSVC compilers.
<a href="#_details">More...</a>
<p>
-<table border="0" cellpadding="0" cellspacing="0">
+<code>#include <<a class="el" href="a00354.html">tbb_machine.h</a>></code>
+<p>
+<a href="a00142.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
-<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_traits< Size, M ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< Size ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_base< I ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< 8 ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_base< uint64_t ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_base< int64_t ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_impl< I, D, Step ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">base class of <a class="el" href="a00174.html">concurrent_hash_map</a> <a href="a00195.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::hash_map_segment_base</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL */. <a href="a00196.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Range class used with <a class="el" href="a00174.html">concurrent_hash_map</a>. <a href="a00197.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00178.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Prefix on a page. <a href="a00179.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type-independent portion of <a class="el" href="a00180.html">concurrent_queue_iterator</a>. <a href="a00181.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL. <a href="a00180.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class of concurrent vector implementation. <a href="a00183.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::concurrent_vector_base_v3::segment_t</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Internal structure for compact(). <a href="a00184.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/. <a href="a00238.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocator_base< T, A ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html">tbb::internal::strip< T ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Strips its template type argument from 'cv' and '&' qualifiers. <a href="a00226.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< T & ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const T & ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< volatile T & ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const volatile T & ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const T ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< volatile T ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const volatile T ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00203.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00186.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::do_iteration_task_iter< Iterator, Body, Item ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00202.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00185.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::do_group_task_input< Body, Item ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00187.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used in parallel_for. <a href="a00222.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce. <a href="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce. <a href="a00223.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00193.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00224.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs final scan for a leaf. <a href="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split work to be done in the scan. <a href="a00227.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combine partial results. <a href="a00194.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial task to split the work. <a href="a00225.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Range used in quicksort to split elements into subranges based on a value. <a href="a00213.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to sort elements in a range that is smaller than the grainsize. <a href="a00212.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00241.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00240.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00242.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Defines entry points into tbb run-time library;. <a href="a00163.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Provides default methods for partition objects without affinity. <a href="a00205.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::affinity_partition_type</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::scheduler</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_root_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_continuation_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_child_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_additional_child_of_proxy</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory prefix to a task object. <a href="a00230.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class that implements exponential backoff. <a href="a00166.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< N ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 1 ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 2 ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 4 ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 8 ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html">tbb::internal::no_copy</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for types that should not be copied or assigned. <a href="a00200.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html">tbb::internal::version_tag_v3</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_base</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_0< F ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Structure used to pass user function with 1 argument to thread. <a href="a00235.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_2< F, X, Y ></b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Versioned thread class. <a href="a00234.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::tbb_thread_v3::id</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::concurrent_queue_base"></a>
-typedef <a class="el" href="a00178.html">concurrent_queue_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_base</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::concurrent_queue_iterator_base"></a>
-typedef <a class="el" href="a00181.html">concurrent_queue_iterator_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_base</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::concurrent_vector_base"></a>
-typedef <a class="el" href="a00183.html">concurrent_vector_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_vector_base</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a4">reduction_context</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">0 if root, 1 if a left child, 2 if a right child. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::Token"></a>
-typedef unsigned long </td><td class="memItemRight" valign="bottom"><b>Token</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::tokendiff_t"></a>
-typedef long </td><td class="memItemRight" valign="bottom"><b>tokendiff_t</b></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a14">intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a11">reference_count</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A reference count. <a href="#a11"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::affinity_id"></a>
-typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a12">affinity_id</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a13">uintptr</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An unsigned integral type big enough to hold a pointer. <a href="#a13"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a14">intptr</a></td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A signed integral type big enough to hold a pointer. <a href="#a14"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::internal::version_tag"></a>
-typedef <a class="el" href="a00239.html">version_tag_v3</a> </td><td class="memItemRight" valign="bottom"><b>version_tag</b></td></tr>
-
-<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::internal::NFS_GetLineSize"></a>
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a16">NFS_GetLineSize</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Cache/sector line size. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::internal::NFS_Allocate"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a17">NFS_Allocate</a> (size_t n_element, size_t element_size, void *hint)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate memory on cache/sector line boundary. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a18">NFS_Free</a> (void *)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free memory allocated by NFS_Allocate. <a href="#a18"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a19" doxytag="tbb::internal::operator=="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a20" doxytag="tbb::internal::operator!="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a21" doxytag="tbb::internal::operator=="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a22" doxytag="tbb::internal::operator!="></a>
-template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a23" doxytag="tbb::internal::operator+"></a>
-template<typename Container, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00238.html">vector_iterator</a>< Container,<br>
- T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &v)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a24" doxytag="tbb::internal::operator=="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a25" doxytag="tbb::internal::operator!="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a26" doxytag="tbb::internal::operator<"></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a27" doxytag="tbb::internal::operator>"></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a28" doxytag="tbb::internal::operator>="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a29" doxytag="tbb::internal::operator<="></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a30" doxytag="tbb::internal::operator-"></a>
-template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a31" doxytag="tbb::internal::handle_perror"></a>
-void </td><td class="memItemRight" valign="bottom"><b>handle_perror</b> (int error_code, const char *what)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga0">run_parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga0"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga1">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item) const )</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga1"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item, typename _Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga2">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item, <a class="el" href="a00201.html">parallel_do_feeder</a>< _Item > &) const )</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a35" doxytag="tbb::internal::itt_store_pointer_with_release_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a35">itt_store_pointer_with_release_v3</a> (void *dst, void *src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">ITT instrumented routine that stores src into location pointed to by dst. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36" doxytag="tbb::internal::itt_load_pointer_with_acquire_v3"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a36">itt_load_pointer_with_acquire_v3</a> (const void *src)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">ITT instrumented routine that loads pointer from location pointed to by src. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a37" doxytag="tbb::internal::parallel_reduce_store_body"></a>
-template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_reduce_store_body</b> (T *&dst, T *src)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a38" doxytag="tbb::internal::parallel_reduce_load_body"></a>
-template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T * </td><td class="memTemplItemRight" valign="bottom"><b>parallel_reduce_load_body</b> (T *&src)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga12" doxytag="tbb::internal::parallel_quick_sort"></a>
-template<typename RandomAccessIterator, typename Compare> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga12">parallel_quick_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper method to initiate the sort by calling parallel_for. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a40" doxytag="tbb::internal::get_initial_auto_partitioner_divisor"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>get_initial_auto_partitioner_divisor</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a41">deallocate_via_handler_v3</a> (void *p)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocates memory using FreeHandler. <a href="#a41"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a42">allocate_via_handler_v3</a> (size_t n)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocates memory using MallocHandler. <a href="#a42"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a43" doxytag="tbb::internal::is_malloc_used_v3"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a43">is_malloc_used_v3</a> ()</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if standard malloc/free are used to work with memory. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a44" doxytag="tbb::internal::__TBB_MaskedCompareAndSwap"></a>
-template<size_t S, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">intptr_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_MaskedCompareAndSwap</b> (volatile int32_t *ptr, T value, T comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a45" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric"></a>
-template<size_t S, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric</b> (volatile void *ptr, T value, T comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a46" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 1, uint8_t >"></a>
-template<> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint8_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 1, uint8_t ></b> (volatile void *ptr, uint8_t value, uint8_t comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a47" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 2, uint16_t >"></a>
-template<> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint16_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 2, uint16_t ></b> (volatile void *ptr, uint16_t value, uint16_t comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a48" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 4, uint32_t >"></a>
-template<> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint32_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 4, uint32_t ></b> (volatile void *ptr, uint32_t value, uint32_t comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a49" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 8, uint64_t >"></a>
-template<> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint64_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 8, uint64_t ></b> (volatile void *ptr, uint64_t value, uint64_t comparand)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a50" doxytag="tbb::internal::__TBB_FetchAndAddGeneric"></a>
-template<size_t S, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_FetchAndAddGeneric</b> (volatile void *ptr, T addend)</td></tr>
-
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a51" doxytag="tbb::internal::__TBB_FetchAndStoreGeneric"></a>
-template<size_t S, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_FetchAndStoreGeneric</b> (volatile void *ptr, T value)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a52" doxytag="tbb::internal::runtime_warning"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a52">runtime_warning</a> (const char *format,...)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Report a runtime warning. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a53" doxytag="tbb::internal::poison_pointer"></a>
-template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>poison_pointer</b> (T *)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a54" doxytag="tbb::internal::allocate_closure_v3"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a54">allocate_closure_v3</a> (size_t size)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a closure. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a55" doxytag="tbb::internal::free_closure_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a55">free_closure_v3</a> (void *)</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free a closure allocated by allocate_closure_v3. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a56" doxytag="tbb::internal::move_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a57" doxytag="tbb::internal::thread_get_id_v3"></a>
-tbb_thread_v3::id </td><td class="memItemRight" valign="bottom"><b>thread_get_id_v3</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a58" doxytag="tbb::internal::thread_yield_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>thread_yield_v3</b> ()</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a59" doxytag="tbb::internal::thread_sleep_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>thread_sleep_v3</b> (const <a class="el" href="a00237.html">tick_count::interval_t</a> &i)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a60" doxytag="tbb::internal::operator=="></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a61" doxytag="tbb::internal::operator!="></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator!=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a62" doxytag="tbb::internal::operator<"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator<</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a63" doxytag="tbb::internal::operator<="></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator<=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a64" doxytag="tbb::internal::operator>"></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator></b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a65" doxytag="tbb::internal::operator>="></a>
-bool </td><td class="memItemRight" valign="bottom"><b>operator>=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-
-<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a0">NFS_MaxLineSize</a> = 128</td></tr>
-
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Compile-time constant that is upper bound on cache line/sector size. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::IS_SERIAL"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>IS_SERIAL</b> = 0x1</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::SERIAL_MODE_MASK"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>SERIAL_MODE_MASK</b> = 0x1</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::VERSION_MASK"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>VERSION_MASK</b> = 0x7<<1</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::CURRENT_VERSION"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>CURRENT_VERSION</b> = __TBB_PIPELINE_VERSION(3)</td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="s0" doxytag="tbb::internal::work_around_alignment_bug::alignment"></a>
+const size_t </td><td class="memItemRight" valign="bottom"><b>alignment</b> = __alignof(T)</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
-INTERNAL
-<p>
-INTERNAL
-<p>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a14" doxytag="tbb::internal::intptr"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef std::ptrdiff_t <a class="el" href="a00279.html#a14">tbb::internal::intptr</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-A signed integral type big enough to hold a pointer.
-<p>
-There's no guarantee by the C++ standard that a ptrdiff_t is really big enough, but it happens to be for all platforms of interest. </td>
- </tr>
-</table>
-<a class="anchor" name="a4" doxytag="tbb::internal::reduction_context"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef char <a class="el" href="a00279.html#a4">tbb::internal::reduction_context</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-0 if root, 1 if a left child, 2 if a right child.
-<p>
-Represented as a char, not enum, for compactness. </td>
- </tr>
-</table>
-<a class="anchor" name="a11" doxytag="tbb::internal::reference_count"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a14">intptr</a> <a class="el" href="a00279.html#a11">tbb::internal::reference_count</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-A reference count.
-<p>
-Should always be non-negative. A signed type is used so that underflow can be detected. </td>
- </tr>
-</table>
-<a class="anchor" name="a13" doxytag="tbb::internal::uintptr"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef size_t <a class="el" href="a00279.html#a13">tbb::internal::uintptr</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-An unsigned integral type big enough to hold a pointer.
-<p>
-There's no guarantee by the C++ standard that a size_t is really big enough, but it happens to be for all platforms of interest. </td>
- </tr>
-</table>
-<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a42" doxytag="tbb::internal::allocate_via_handler_v3"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void* allocate_via_handler_v3 </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">size_t </td>
- <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Allocates memory using MallocHandler.
-<p>
-The function uses scalable_malloc if scalable allocator is available and malloc if not </td>
- </tr>
-</table>
-<a class="anchor" name="a41" doxytag="tbb::internal::deallocate_via_handler_v3"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void deallocate_via_handler_v3 </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">void * </td>
- <td class="mdname1" valign="top" nowrap> <em>p</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
+<h3>template<size_t Size, typename T><br>
+ struct tbb::internal::work_around_alignment_bug< Size, T ></h3>
+Work around for bug in GNU 3.2 and MSVC compilers.
<p>
-Deallocates memory using FreeHandler.
+Bug is that compiler sometimes returns 0 for __alignof(T) when T has not yet been instantiated. The work-around forces instantiation by forcing computation of sizeof(T) before __alignof(T).
<p>
-The function uses scalable_free if scalable allocator is available and free if not </td>
- </tr>
-</table>
-<a class="anchor" name="a18" doxytag="tbb::internal::NFS_Free"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void NFS_Free </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">void * </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Free memory allocated by NFS_Allocate.
-<p>
-Freeing a NULL pointer is allowed, but has no effect. </td>
- </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::internal::NFS_MaxLineSize"></a><p>
-<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">const size_t <a class="el" href="a00279.html#a0">tbb::internal::NFS_MaxLineSize</a> = 128 </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
-
-<p>
-Compile-time constant that is upper bound on cache line/sector size.
-<p>
-It should be used only in situations where having a compile-time upper bound is more useful than a run-time exact answer. </td>
- </tr>
-</table>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00354.html">tbb_machine.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00289.html b/doc/html/a00289.html
deleted file mode 100644
index 553e947..0000000
--- a/doc/html/a00289.html
+++ /dev/null
@@ -1,888 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_hash_map.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include <stdexcept></span>
-00025 <span class="preprocessor">#include <iterator></span>
-00026 <span class="preprocessor">#include <utility></span> <span class="comment">// Need std::pair from here</span>
-00027 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00028 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-00029 <span class="preprocessor">#include "tbb_allocator.h"</span>
-00030 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
-00031 <span class="preprocessor">#include "atomic.h"</span>
-00032 <span class="preprocessor">#include "aligned_space.h"</span>
-00033 <span class="preprocessor">#if TBB_PERFORMANCE_WARNINGS</span>
-00034 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
-00035 <span class="preprocessor">#endif</span>
-00036 <span class="preprocessor"></span>
-00037 <span class="keyword">namespace </span>tbb {
-00038
-00039 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A = tbb_allocator<std::pair<Key, T> > >
-00040 <span class="keyword">class </span>concurrent_hash_map;
-00041
-00043 <span class="keyword">namespace </span>internal {
-<a name="l00045"></a><a class="code" href="a00195.html">00045</a> <span class="keyword">class </span><a class="code" href="a00195.html">hash_map_base</a> {
-00046 <span class="keyword">public</span>:
-00047 <span class="comment">// Mutex types for each layer of the container</span>
-00048 <span class="keyword">typedef</span> <a class="code" href="a00219.html">spin_rw_mutex</a> <a class="code" href="a00219.html">node_mutex_t</a>;
-00049 <span class="keyword">typedef</span> <a class="code" href="a00219.html">spin_rw_mutex</a> <a class="code" href="a00219.html">chain_mutex_t</a>;
-00050 <span class="keyword">typedef</span> <a class="code" href="a00219.html">spin_rw_mutex</a> <a class="code" href="a00219.html">segment_mutex_t</a>;
-00051
-<a name="l00053"></a><a class="code" href="a00195.html#w3">00053</a> <span class="keyword">typedef</span> size_t <a class="code" href="a00195.html#w3">hashcode_t</a>;
-<a name="l00055"></a><a class="code" href="a00195.html#s0">00055</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t n_segment_bits = 6;
-<a name="l00057"></a><a class="code" href="a00195.html#s1">00057</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t n_segment = size_t(1)<<n_segment_bits;
-<a name="l00059"></a><a class="code" href="a00195.html#s2">00059</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t max_physical_size = size_t(1)<<(8*<span class="keyword">sizeof</span>(hashcode_t)-n_segment_bits);
-00060 };
-00061
-00062 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-00063 <span class="keyword">class </span><a class="code" href="a00197.html">hash_map_range</a>;
-00064
-00065 <span class="keyword">struct </span>hash_map_segment_base {
-00067 <a class="code" href="a00219.html">hash_map_base::segment_mutex_t</a> my_mutex;
-00068
-00069 <span class="comment">// Number of nodes</span>
-00070 <a class="code" href="a00165.html">atomic<size_t></a> my_logical_size;
-00071
-00072 <span class="comment">// Size of chains</span>
-00074 <span class="comment"></span> size_t my_physical_size;
-00075
-00077
-00078 <span class="keywordtype">bool</span> internal_grow_predicate() <span class="keyword">const</span>;
-00079 };
-00080
-00082
-00084 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00085"></a><a class="code" href="a00196.html">00085</a> <span class="keyword">class </span><a class="code" href="a00196.html">hash_map_iterator</a>
-00086 #if defined(_WIN64) && defined(_MSC_VER)
-00087 <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-00088 : public std::iterator<std::forward_iterator_tag,Value>
-00089 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-00090 {
-00091 <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
-00092 <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::chain chain;
-00093
-00095 Container* my_table;
-00096
-00098 node* my_node;
-00099
-00101 size_t my_array_index;
-00102
-00104 size_t my_segment_index;
-00105
-00106 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00107 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,U></a>& j );
-00108
-00109 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00110 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,U></a>& j );
-00111
-00112 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00113 <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<C,U></a>& j );
-00114
-00115 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-00116 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00196.html">internal::hash_map_iterator</a>;
-00117
-00118 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00119 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00197.html">internal::hash_map_range</a>;
-00120
-00121 <span class="keywordtype">void</span> advance_to_next_node() {
-00122 size_t i = my_array_index+1;
-00123 <span class="keywordflow">do</span> {
-00124 <span class="keywordflow">while</span>( i<my_table->my_segment[my_segment_index].my_physical_size ) {
-00125 my_node = my_table->my_segment[my_segment_index].my_array[i].node_list;
-00126 <span class="keywordflow">if</span>( my_node ) <span class="keywordflow">goto</span> done;
-00127 ++i;
-00128 }
-00129 i = 0;
-00130 } <span class="keywordflow">while</span>( ++my_segment_index<my_table->n_segment );
-00131 done:
-00132 my_array_index = i;
-00133 }
-00134 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-00135 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00136 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00174.html">tbb::concurrent_hash_map</a>;
-00137 <span class="preprocessor">#else</span>
-00138 <span class="preprocessor"></span> <span class="keyword">public</span>: <span class="comment">// workaround</span>
-00139 <span class="preprocessor">#endif</span>
-00140 <span class="preprocessor"></span> <a class="code" href="a00196.html">hash_map_iterator</a>( <span class="keyword">const</span> Container& table, size_t segment_index, size_t array_index=0, node* b=NULL );
-00141 <span class="keyword">public</span>:
-<a name="l00143"></a><a class="code" href="a00196.html#a0">00143</a> <a class="code" href="a00196.html">hash_map_iterator</a>() {}
-00144 <a class="code" href="a00196.html">hash_map_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00196.html">hash_map_iterator<Container,typename Container::value_type></a>& other ) :
-00145 my_table(other.my_table),
-00146 my_node(other.my_node),
-00147 my_array_index(other.my_array_index),
-00148 my_segment_index(other.my_segment_index)
-00149 {}
-00150 Value& operator*()<span class="keyword"> const </span>{
-00151 __TBB_ASSERT( my_node, <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
-00152 <span class="keywordflow">return</span> my_node->item;
-00153 }
-00154 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-00155 hash_map_iterator& operator++();
-00156
-<a name="l00158"></a><a class="code" href="a00196.html#a5">00158</a> Value* operator++(<span class="keywordtype">int</span>) {
-00159 Value* result = &operator*();
-00160 operator++();
-00161 <span class="keywordflow">return</span> result;
-00162 }
-00163
-00164 <span class="comment">// STL support</span>
-00165
-00166 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00167 <span class="keyword">typedef</span> Value value_type;
-00168 <span class="keyword">typedef</span> Value* pointer;
-00169 <span class="keyword">typedef</span> Value& reference;
-00170 <span class="keyword">typedef</span> <span class="keyword">const</span> Value& const_reference;
-00171 <span class="keyword">typedef</span> std::forward_iterator_tag iterator_category;
-00172 };
-00173
-00174 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-00175 hash_map_iterator<Container,Value>::hash_map_iterator( <span class="keyword">const</span> Container& table, size_t segment_index, size_t array_index, node* b ) :
-00176 my_table(const_cast<Container*>(&table)),
-00177 my_node(b),
-00178 my_array_index(array_index),
-00179 my_segment_index(segment_index)
-00180 {
-00181 <span class="keywordflow">if</span>( segment_index<my_table->n_segment ) {
-00182 <span class="keywordflow">if</span>( !my_node ) {
-00183 chain* first_chain = my_table->my_segment[segment_index].my_array;
-00184 <span class="keywordflow">if</span>( first_chain ) my_node = first_chain[my_array_index].node_list;
-00185 }
-00186 <span class="keywordflow">if</span>( !my_node ) advance_to_next_node();
-00187 }
-00188 }
-00189
-00190 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-00191 hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
-00192 my_node=my_node->next;
-00193 <span class="keywordflow">if</span>( !my_node ) advance_to_next_node();
-00194 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00195 }
-00196
-00197 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00198 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator<Container,T>& i, <span class="keyword">const</span> hash_map_iterator<Container,U>& j ) {
-00199 <span class="keywordflow">return</span> i.<a class="code" href="a00196.html#r1">my_node</a>==j.<a class="code" href="a00196.html#r1">my_node</a>;
-00200 }
-00201
-00202 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00203 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator<Container,T>& i, <span class="keyword">const</span> hash_map_iterator<Container,U>& j ) {
-00204 <span class="keywordflow">return</span> i.<a class="code" href="a00196.html#r1">my_node</a>!=j.<a class="code" href="a00196.html#r1">my_node</a>;
-00205 }
-00206
-00208
-00209 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-<a name="l00210"></a><a class="code" href="a00197.html">00210</a> <span class="keyword">class </span><a class="code" href="a00197.html">hash_map_range</a> {
-00211 <span class="keyword">private</span>:
-00212 Iterator my_begin;
-00213 Iterator my_end;
-00214 <span class="keyword">mutable</span> Iterator my_midpoint;
-00215 size_t my_grainsize;
-00217 <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
-00218 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00197.html">hash_map_range</a>;
-00219 <span class="keyword">public</span>:
-<a name="l00221"></a><a class="code" href="a00197.html#w0">00221</a> <span class="keyword">typedef</span> std::size_t size_type;
-00222 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
-00223 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
-00224 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::const_reference const_reference;
-00225 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
-00226 <span class="keyword">typedef</span> Iterator iterator;
-00227
-<a name="l00229"></a><a class="code" href="a00197.html#a0">00229</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
-00230
-<a name="l00232"></a><a class="code" href="a00197.html#a1">00232</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-00233 <span class="keywordflow">return</span> my_midpoint!=my_end;
-00234 }
-<a name="l00236"></a><a class="code" href="a00197.html#a2">00236</a> <a class="code" href="a00197.html">hash_map_range</a>( <a class="code" href="a00197.html">hash_map_range</a>& r, <a class="code" href="a00221.html">split</a> ) :
-00237 my_end(r.my_end),
-00238 my_grainsize(r.my_grainsize)
-00239 {
-00240 r.<a class="code" href="a00197.html#r1">my_end</a> = my_begin = r.<a class="code" href="a00197.html#r2">my_midpoint</a>;
-00241 set_midpoint();
-00242 r.<a class="code" href="a00197.html#d0">set_midpoint</a>();
-00243 }
-00245 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-<a name="l00246"></a><a class="code" href="a00197.html#a3">00246</a> <a class="code" href="a00197.html">hash_map_range</a>( <a class="code" href="a00197.html">hash_map_range<U></a>& r) :
-00247 my_begin(r.my_begin),
-00248 my_end(r.my_end),
-00249 my_midpoint(r.my_midpoint),
-00250 my_grainsize(r.my_grainsize)
-00251 {}
-<a name="l00253"></a><a class="code" href="a00197.html#a4">00253</a> <a class="code" href="a00197.html">hash_map_range</a>( <span class="keyword">const</span> Iterator& begin_, <span class="keyword">const</span> Iterator& end_, size_type grainsize = 1 ) :
-00254 my_begin(begin_),
-00255 my_end(end_),
-00256 my_grainsize(grainsize)
-00257 {
-00258 set_midpoint();
-00259 __TBB_ASSERT( grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
-00260 }
-00261 <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
-00262 <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
-<a name="l00264"></a><a class="code" href="a00197.html#a7">00264</a> size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
-00265 };
-00266
-00267 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
-00268 <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
-00269 size_t n = my_end.my_segment_index-my_begin.my_segment_index;
-00270 <span class="keywordflow">if</span>( n>1 || (n==1 && my_end.my_array_index>0) ) {
-00271 <span class="comment">// Split by groups of segments</span>
-00272 my_midpoint = Iterator(*my_begin.my_table,(my_end.my_segment_index+my_begin.my_segment_index)/2u);
-00273 } <span class="keywordflow">else</span> {
-00274 <span class="comment">// Split by groups of nodes</span>
-00275 size_t m = my_end.my_array_index-my_begin.my_array_index;
-00276 <span class="keywordflow">if</span>( m>my_grainsize ) {
-00277 my_midpoint = Iterator(*my_begin.my_table,my_begin.my_segment_index,m/2u);
-00278 } <span class="keywordflow">else</span> {
-00279 my_midpoint = my_end;
-00280 }
-00281 }
-00282 __TBB_ASSERT( my_midpoint.my_segment_index<=my_begin.my_table->n_segment, NULL );
-00283 }
-00284 } <span class="comment">// namespace internal</span>
-00286 <span class="comment"></span>
-00288
-00313 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00314"></a><a class="code" href="a00174.html">00314</a> <span class="keyword">class </span><a class="code" href="a00174.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
-00315 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-00316 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00196.html">internal::hash_map_iterator</a>;
-00317
-00318 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00319 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00197.html">internal::hash_map_range</a>;
-00320
-00321 <span class="keyword">struct </span>node;
-00322 <span class="keyword">friend</span> <span class="keyword">struct </span>node;
-00323 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<node>::other node_allocator_type;
-00324
-00325 <span class="keyword">public</span>:
-00326 <span class="keyword">class </span><a class="code" href="a00176.html">const_accessor</a>;
-00327 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00176.html">const_accessor</a>;
-00328 <span class="keyword">class </span><a class="code" href="a00175.html">accessor</a>;
-00329
-00330 <span class="keyword">typedef</span> Key key_type;
-00331 <span class="keyword">typedef</span> T mapped_type;
-00332 <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
-00333 <span class="keyword">typedef</span> size_t size_type;
-00334 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00335 <span class="keyword">typedef</span> value_type *pointer;
-00336 <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
-00337 <span class="keyword">typedef</span> value_type &reference;
-00338 <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
-00339 <span class="keyword">typedef</span> <a class="code" href="a00196.html">internal::hash_map_iterator<concurrent_hash_map,value_type></a> <a class="code" href="a00196.html">iterator</a>;
-00340 <span class="keyword">typedef</span> <a class="code" href="a00196.html">internal::hash_map_iterator<concurrent_hash_map,const value_type></a> <a class="code" href="a00196.html">const_iterator</a>;
-00341 <span class="keyword">typedef</span> <a class="code" href="a00197.html">internal::hash_map_range<iterator></a> <a class="code" href="a00197.html">range_type</a>;
-00342 <span class="keyword">typedef</span> <a class="code" href="a00197.html">internal::hash_map_range<const_iterator></a> <a class="code" href="a00197.html">const_range_type</a>;
-00343 <span class="keyword">typedef</span> A allocator_type;
-00344
-<a name="l00346"></a><a class="code" href="a00176.html">00346</a> <span class="keyword">class </span><a class="code" href="a00176.html">const_accessor</a> {
-00347 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00174.html">concurrent_hash_map</a>;
-00348 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00175.html">accessor</a>;
-00349 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00175.html">accessor</a>& ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
-00350 <a class="code" href="a00176.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00175.html">accessor</a>& ); <span class="comment">// Deny access</span>
-00351 <span class="keyword">public</span>:
-<a name="l00353"></a><a class="code" href="a00176.html#w0">00353</a> <span class="keyword">typedef</span> <span class="keyword">const</span> std::pair<const Key,T> value_type;
-00354
-<a name="l00356"></a><a class="code" href="a00176.html#a0">00356</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
-00357
-<a name="l00359"></a><a class="code" href="a00176.html#a1">00359</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>() {
-00360 <span class="keywordflow">if</span>( my_node ) {
-00361 my_lock.release();
-00362 my_node = NULL;
-00363 }
-00364 }
-00365
-<a name="l00367"></a><a class="code" href="a00176.html#a2">00367</a> const_reference operator*()<span class="keyword"> const </span>{
-00368 __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-00369 <span class="keywordflow">return</span> my_node->item;
-00370 }
-00371
-<a name="l00373"></a><a class="code" href="a00176.html#a3">00373</a> const_pointer operator->()<span class="keyword"> const </span>{
-00374 <span class="keywordflow">return</span> &operator*();
-00375 }
-00376
-<a name="l00378"></a><a class="code" href="a00176.html#a4">00378</a> <a class="code" href="a00176.html">const_accessor</a>() : my_node(NULL) {}
-00379
-<a name="l00381"></a><a class="code" href="a00176.html#a5">00381</a> ~<a class="code" href="a00176.html">const_accessor</a>() {
-00382 my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
-00383 }
-00384 <span class="keyword">private</span>:
-00385 node* my_node;
-00386 node_mutex_t::scoped_lock my_lock;
-00387 hashcode_t my_hash;
-00388 };
-00389
-<a name="l00391"></a><a class="code" href="a00175.html">00391</a> <span class="keyword">class </span><a class="code" href="a00175.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00176.html">const_accessor</a> {
-00392 <span class="keyword">public</span>:
-<a name="l00394"></a><a class="code" href="a00175.html#w0">00394</a> <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
-00395
-<a name="l00397"></a><a class="code" href="a00175.html#a0">00397</a> reference operator*()<span class="keyword"> const </span>{
-00398 __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
-00399 <span class="keywordflow">return</span> this->my_node->item;
-00400 }
-00401
-<a name="l00403"></a><a class="code" href="a00175.html#a1">00403</a> pointer operator->()<span class="keyword"> const </span>{
-00404 <span class="keywordflow">return</span> &operator*();
-00405 }
-00406 };
-00407
-<a name="l00409"></a><a class="code" href="a00174.html#a0">00409</a> <a class="code" href="a00174.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-00410 : my_allocator(a)
-00411
-00412 {
-00413 initialize();
-00414 }
-00415
-<a name="l00417"></a><a class="code" href="a00174.html#a1">00417</a> <a class="code" href="a00174.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00174.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
-00418 : my_allocator(a)
-00419 {
-00420 initialize();
-00421 internal_copy(table);
-00422 }
-00423
-00425 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00426"></a><a class="code" href="a00174.html#a2">00426</a> <a class="code" href="a00174.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-00427 : my_allocator(a)
-00428 {
-00429 initialize();
-00430 internal_copy(first, last);
-00431 }
-00432
-<a name="l00434"></a><a class="code" href="a00174.html#a3">00434</a> <a class="code" href="a00174.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00174.html">concurrent_hash_map</a>& table ) {
-00435 <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
-00436 clear();
-00437 internal_copy(table);
-00438 }
-00439 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00440 }
-00441
-00442
-00444 <span class="keywordtype">void</span> clear();
-00445
-00447 ~<a class="code" href="a00174.html">concurrent_hash_map</a>();
-00448
-00449 <span class="comment">//------------------------------------------------------------------------</span>
-00450 <span class="comment">// Parallel algorithm support</span>
-00451 <span class="comment">//------------------------------------------------------------------------</span>
-00452 range_type range( size_type grainsize=1 ) {
-00453 <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
-00454 }
-00455 const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
-00456 <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
-00457 }
-00458
-00459 <span class="comment">//------------------------------------------------------------------------</span>
-00460 <span class="comment">// STL support - not thread-safe methods</span>
-00461 <span class="comment">//------------------------------------------------------------------------</span>
-00462 iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
-00463 iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,n_segment);}
-00464 const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
-00465 const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,n_segment);}
-00466 std::pair<iterator, iterator> equal_range( <span class="keyword">const</span> Key& key ) { <span class="keywordflow">return</span> internal_equal_range(key, end()); }
-00467 std::pair<const_iterator, const_iterator> equal_range( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal_equal_range(key, end()); }
-00468
-00470
-00472 size_type size() <span class="keyword">const</span>;
-00473
-00475 <span class="keywordtype">bool</span> empty() <span class="keyword">const</span>;
-00476
-<a name="l00478"></a><a class="code" href="a00174.html#a16">00478</a> size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(node);}
-00479
-<a name="l00481"></a><a class="code" href="a00174.html#a17">00481</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-00482
-00484 <span class="keywordtype">void</span> swap(<a class="code" href="a00174.html">concurrent_hash_map</a> &table);
-00485
-00486 <span class="comment">//------------------------------------------------------------------------</span>
-00487 <span class="comment">// concurrent map operations</span>
-00488 <span class="comment">//------------------------------------------------------------------------</span>
-00489
-<a name="l00491"></a><a class="code" href="a00174.html#a19">00491</a> size_type count( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
-00492 <span class="keywordflow">return</span> const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->lookup<<span class="comment">/*insert*/</span><span class="keyword">false</span>>(NULL, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
-00493 }
-00494
-00496
-<a name="l00497"></a><a class="code" href="a00174.html#a20">00497</a> <span class="keywordtype">bool</span> find( <a class="code" href="a00176.html">const_accessor</a>& result, <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
-00498 <span class="keywordflow">return</span> const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)->lookup<<span class="comment">/*insert*/</span><span class="keyword">false</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
-00499 }
-00500
-00502
-<a name="l00503"></a><a class="code" href="a00174.html#a21">00503</a> <span class="keywordtype">bool</span> find( <a class="code" href="a00175.html">accessor</a>& result, <span class="keyword">const</span> Key& key ) {
-00504 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">false</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">true</span>, NULL );
-00505 }
-00506
-00508
-<a name="l00509"></a><a class="code" href="a00174.html#a22">00509</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00176.html">const_accessor</a>& result, <span class="keyword">const</span> Key& key ) {
-00510 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
-00511 }
-00512
-00514
-<a name="l00515"></a><a class="code" href="a00174.html#a23">00515</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00175.html">accessor</a>& result, <span class="keyword">const</span> Key& key ) {
-00516 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">true</span>, NULL );
-00517 }
-00518
-00520
-<a name="l00521"></a><a class="code" href="a00174.html#a24">00521</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00176.html">const_accessor</a>& result, <span class="keyword">const</span> value_type& value ) {
-00522 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, value.first, <span class="comment">/*write=*/</span><span class="keyword">false</span>, &value.second );
-00523 }
-00524
-00526
-<a name="l00527"></a><a class="code" href="a00174.html#a25">00527</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00175.html">accessor</a>& result, <span class="keyword">const</span> value_type& value ) {
-00528 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, value.first, <span class="comment">/*write=*/</span><span class="keyword">true</span>, &value.second );
-00529 }
-00530
-00532
-<a name="l00533"></a><a class="code" href="a00174.html#a26">00533</a> <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type& value ) {
-00534 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(NULL, value.first, <span class="comment">/*write=*/</span><span class="keyword">false</span>, &value.second );
-00535 }
-00536
-00538 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-<a name="l00539"></a><a class="code" href="a00174.html#a27">00539</a> <span class="keywordtype">void</span> insert(I first, I last) {
-00540 <span class="keywordflow">for</span>(; first != last; ++first)
-00541 insert( *first );
-00542 }
-00543
-00545
-00546 <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
-00547
-00549
-<a name="l00550"></a><a class="code" href="a00174.html#a29">00550</a> <span class="keywordtype">bool</span> erase( <a class="code" href="a00176.html">const_accessor</a>& item_accessor ) {
-00551 <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
-00552 }
-00553
-00555
-<a name="l00556"></a><a class="code" href="a00174.html#a30">00556</a> <span class="keywordtype">bool</span> erase( <a class="code" href="a00175.html">accessor</a>& item_accessor ) {
-00557 <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
-00558 }
-00559
-00560 <span class="keyword">private</span>:
-00562 <span class="keyword">struct </span>node {
-00564 node* next;
-00565 node_mutex_t <a class="code" href="a00198.html">mutex</a>;
-00566 value_type item;
-00567 node( <span class="keyword">const</span> Key& key ) : item(key, T()) {}
-00568 node( <span class="keyword">const</span> Key& key, <span class="keyword">const</span> T& t ) : item(key, t) {}
-00569 <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
-00570 <span class="keywordtype">void</span>* operator new( size_t size, node_allocator_type& a ) {
-00571 <span class="keywordtype">void</span> *ptr = a.allocate(1);
-00572 <span class="keywordflow">if</span>(!ptr) <span class="keywordflow">throw</span> std::bad_alloc();
-00573 <span class="keywordflow">return</span> ptr;
-00574 }
-00575 <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
-00576 <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr, node_allocator_type& a ) {<span class="keywordflow">return</span> a.deallocate(static_cast<node*>(ptr),1); }
-00577 };
-00578
-00579 <span class="keyword">struct </span>chain;
-00580 <span class="keyword">friend</span> <span class="keyword">struct </span>chain;
-00581
-00583
-00584 <span class="keyword">struct </span>chain {
-00585 <span class="keywordtype">void</span> push_front( node& b ) {
-00586 b.next = node_list;
-00587 node_list = &b;
-00588 }
-00589 chain_mutex_t mutex;
-00590 node* node_list;
-00591 };
-00592
-00593 <span class="keyword">struct </span>segment;
-00594 <span class="keyword">friend</span> <span class="keyword">struct </span>segment;
-00595
-00597
-00599 <span class="keyword">struct </span>segment: internal::hash_map_segment_base {
-00600 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00601 <span class="preprocessor"></span> ~segment() {
-00602 __TBB_ASSERT( !my_array, <span class="stringliteral">"should have been cleared earlier"</span> );
-00603 }
-00604 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00605
-00606 <span class="comment">// Pointer to array of chains</span>
-00607 chain* my_array;
-00608
-00609 <span class="comment">// Get chain in this segment that corresponds to given hash code.</span>
-00610 chain& get_chain( hashcode_t hashcode, size_t n_segment_bits ) {
-00611 <span class="keywordflow">return</span> my_array[(hashcode>>n_segment_bits)&(my_physical_size-1)];
-00612 }
-00613
-00615
-00617 <span class="keywordtype">void</span> allocate_array( size_t new_size ) {
-00618 size_t n=(internal::NFS_GetLineSize()+<span class="keyword">sizeof</span>(chain)-1)/<span class="keyword">sizeof</span>(chain);
-00619 __TBB_ASSERT((n&(n-1))==0, NULL);
-00620 <span class="keywordflow">while</span>( n<new_size ) n<<=1;
-00621 chain* array = cache_aligned_allocator<chain>().allocate( n );
-00622 <span class="comment">// storing earlier might help overcome false positives of in deducing "bool grow" in concurrent threads</span>
-00623 __TBB_store_with_release(my_physical_size, n);
-00624 memset( array, 0, n*<span class="keyword">sizeof</span>(chain) );
-00625 my_array = array;
-00626 }
-00627 };
-00628
-00629 segment& get_segment( hashcode_t hashcode ) {
-00630 <span class="keywordflow">return</span> my_segment[hashcode&(n_segment-1)];
-00631 }
-00632
-00633 node_allocator_type my_allocator;
-00634
-00635 HashCompare my_hash_compare;
-00636
-00637 segment* my_segment;
-00638
-00639 node* create_node(<span class="keyword">const</span> Key& key, <span class="keyword">const</span> T* t) {
-00640 <span class="comment">// exception-safe allocation and construction</span>
-00641 <span class="keywordflow">if</span>(t) <span class="keywordflow">return</span> <span class="keyword">new</span>( my_allocator ) node(key, *t);
-00642 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">new</span>( my_allocator ) node(key);
-00643 }
-00644
-00645 <span class="keywordtype">void</span> delete_node(node* b) {
-00646 my_allocator.destroy(b);
-00647 my_allocator.deallocate(b, 1);
-00648 }
-00649
-00650 node* search_list( <span class="keyword">const</span> Key& key, chain& c )<span class="keyword"> const </span>{
-00651 node* b = c.node_list;
-00652 <span class="keywordflow">while</span>( b && !my_hash_compare.equal(key, b->item.first) )
-00653 b = b->next;
-00654 <span class="keywordflow">return</span> b;
-00655 }
-00657 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00658 std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
-00659
-00661 <span class="keywordtype">bool</span> exclude( const_accessor& item_accessor, <span class="keywordtype">bool</span> readonly );
-00662
-00664 <span class="keywordtype">void</span> grow_segment( segment_mutex_t::scoped_lock& segment_lock, segment& s );
-00665
-00667 <span class="keyword">template</span><<span class="keywordtype">bool</span> op_insert>
-00668 <span class="keywordtype">bool</span> lookup( const_accessor* result, <span class="keyword">const</span> Key& key, <span class="keywordtype">bool</span> write, <span class="keyword">const</span> T* t );
-00669
-00671 <span class="keywordtype">void</span> initialize() {
-00672 my_segment = cache_aligned_allocator<segment>().allocate(n_segment);
-00673 memset( my_segment, 0, <span class="keyword">sizeof</span>(segment)*n_segment );
-00674 }
-00675
-00677 <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> concurrent_hash_map& source );
-00678
-00679 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00680 <span class="keywordtype">void</span> internal_copy(I first, I last);
-00681 };
-00682
-00683 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00684"></a><a class="code" href="a00174.html#a5">00684</a> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::~concurrent_hash_map</a>() {
-00685 <a class="code" href="a00174.html#a4">clear</a>();
-00686 <a class="code" href="a00172.html">cache_aligned_allocator<segment></a>().deallocate( my_segment, n_segment );
-00687 }
-00688
-00689 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00690"></a><a class="code" href="a00174.html#a14">00690</a> <span class="keyword">typename</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A></a>::size_type <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::size</a>()<span class="keyword"> const </span>{
-00691 size_type result = 0;
-00692 <span class="keywordflow">for</span>( size_t k=0; k<n_segment; ++k )
-00693 result += my_segment[k].my_logical_size;
-00694 <span class="keywordflow">return</span> result;
-00695 }
-00696
-00697 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00698"></a><a class="code" href="a00174.html#a15">00698</a> <span class="keywordtype">bool</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::empty</a>()<span class="keyword"> const </span>{
-00699 <span class="keywordflow">for</span>( size_t k=0; k<n_segment; ++k )
-00700 <span class="keywordflow">if</span>( my_segment[k].my_logical_size )
-00701 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00702 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00703 }
-00704
-00705 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00706 <span class="keyword">template</span><<span class="keywordtype">bool</span> op_insert>
-00707 <span class="keywordtype">bool</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::lookup</a>( const_accessor* result, <span class="keyword">const</span> Key& key, <span class="keywordtype">bool</span> write, <span class="keyword">const</span> T* t ) {
-00708 <span class="keywordflow">if</span>( result <span class="comment">/*&& result->my_node -- checked in release() */</span> )
-00709 result->release();
-00710 <span class="keyword">const</span> hashcode_t h = my_hash_compare.hash( key );
-00711 segment& s = get_segment(h);
-00712 restart:
-00713 <span class="keywordtype">bool</span> return_value = <span class="keyword">false</span>;
-00714 <span class="comment">// first check in double-check sequence</span>
-00715 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00716 <span class="preprocessor"></span> <span class="keyword">const</span> <span class="keywordtype">bool</span> grow = op_insert && s.internal_grow_predicate();
-00717 <span class="preprocessor">#else</span>
-00718 <span class="preprocessor"></span> <span class="keyword">const</span> <span class="keywordtype">bool</span> grow = op_insert && s.my_logical_size >= s.my_physical_size
-00719 && s.my_physical_size < max_physical_size; <span class="comment">// check whether there are free bits</span>
-00720 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00721 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span>grow );
-00722 <span class="keywordflow">if</span>( grow ) { <span class="comment">// Load factor is too high </span>
-00723 grow_segment( segment_lock, s );
-00724 }
-00725 <span class="keywordflow">if</span>( !s.my_array ) {
-00726 __TBB_ASSERT( !op_insert, NULL );
-00727 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00728 }
-00729 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
-00730 chain& c = s.get_chain( h, n_segment_bits );
-00731 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-00732
-00733 node* b = search_list( key, c );
-00734 <span class="keywordflow">if</span>( op_insert ) {
-00735 <span class="keywordflow">if</span>( !b ) {
-00736 b = create_node(key, t);
-00737 <span class="comment">// Search failed</span>
-00738 <span class="keywordflow">if</span>( !chain_lock.upgrade_to_writer() ) {
-00739 <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
-00740 node* b_temp = search_list( key, c );
-00741 <span class="keywordflow">if</span>( b_temp ) { <span class="comment">// unfortunately, it did</span>
-00742 chain_lock.downgrade_to_reader();
-00743 delete_node( b );
-00744 b = b_temp;
-00745 <span class="keywordflow">goto</span> done;
-00746 }
-00747 }
-00748 ++s.my_logical_size; <span class="comment">// we can't change it earlier due to correctness of size() and exception safety of equal()</span>
-00749 return_value = <span class="keyword">true</span>;
-00750 c.push_front( *b );
-00751 }
-00752 } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
-00753 <span class="keywordflow">if</span>( !b ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00754 return_value = <span class="keyword">true</span>;
-00755 }
-00756 done:
-00757 <span class="keywordflow">if</span>( !result ) <span class="keywordflow">return</span> return_value;
-00758 <span class="keywordflow">if</span>( !result->my_lock.try_acquire( b->mutex, write ) ) {
-00759 <span class="comment">// we are unlucky, prepare for longer wait</span>
-00760 internal::AtomicBackoff trials;
-00761 <span class="keywordflow">do</span> {
-00762 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
-00763 <span class="comment">// the wait takes really long, restart the operation</span>
-00764 chain_lock.release(); segment_lock.release();
-00765 __TBB_Yield();
-00766 <span class="keywordflow">goto</span> restart;
-00767 }
-00768 } <span class="keywordflow">while</span>( !result->my_lock.try_acquire( b->mutex, write ) );
-00769 }
-00770 result->my_node = b;
-00771 result->my_hash = h;
-00772 <span class="keywordflow">return</span> return_value;
-00773 }
-00774
-00775 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00776 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00777 std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( <span class="keyword">const</span> Key& key, I end )<span class="keyword"> const </span>{
-00778 <a class="code" href="a00195.html#w3">hashcode_t</a> h = my_hash_compare.hash( key );
-00779 size_t segment_index = h&(<a class="code" href="a00195.html#s1">n_segment</a>-1);
-00780 segment& s = my_segment[segment_index ];
-00781 size_t chain_index = (h>>n_segment_bits)&(s.my_physical_size-1);
-00782 <span class="keywordflow">if</span>( !s.my_array )
-00783 <span class="keywordflow">return</span> std::make_pair(end, end);
-00784 chain& c = s.my_array[chain_index];
-00785 node* b = search_list( key, c );
-00786 <span class="keywordflow">if</span>( !b )
-00787 <span class="keywordflow">return</span> std::make_pair(end, end);
-00788 iterator lower(*<span class="keyword">this</span>, segment_index, chain_index, b), upper(lower);
-00789 <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
-00790 }
-00791
-00792 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00793"></a><a class="code" href="a00174.html#a28">00793</a> <span class="keywordtype">bool</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
-00794 hashcode_t h = my_hash_compare.hash( key );
-00795 segment& s = get_segment( h );
-00796 node* b;
-00797 {
-00798 <span class="keywordtype">bool</span> chain_locked_for_write = <span class="keyword">false</span>;
-00799 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-00800 <span class="keywordflow">if</span>( !s.my_array ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00801 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
-00802 chain& c = s.get_chain( h, n_segment_bits );
-00803 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-00804 search:
-00805 node** p = &c.node_list;
-00806 b = *p;
-00807 <span class="keywordflow">while</span>( b && !my_hash_compare.equal(key, b->item.first ) ) {
-00808 p = &b->next;
-00809 b = *p;
-00810 }
-00811 <span class="keywordflow">if</span>( !b ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00812 <span class="keywordflow">if</span>( !chain_locked_for_write && !chain_lock.upgrade_to_writer() ) {
-00813 chain_locked_for_write = <span class="keyword">true</span>;
-00814 <span class="keywordflow">goto</span> search;
-00815 }
-00816 *p = b->next;
-00817 --s.my_logical_size;
-00818 }
-00819 {
-00820 node_mutex_t::scoped_lock item_locker( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-00821 }
-00822 <span class="comment">// note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!</span>
-00823 delete_node( b ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
-00824 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00825 }
-00826
-00827 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00828 <span class="keywordtype">bool</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( const_accessor &item_accessor, <span class="keywordtype">bool</span> readonly ) {
-00829 __TBB_ASSERT( item_accessor.my_node, NULL );
-00830 <span class="keyword">const</span> hashcode_t h = item_accessor.my_hash;
-00831 node *<span class="keyword">const</span> b = item_accessor.my_node;
-00832 item_accessor.my_node = NULL; <span class="comment">// we ought release accessor anyway</span>
-00833 segment& s = get_segment( h );
-00834 {
-00835 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
-00836 __TBB_ASSERT( s.my_array, NULL );
-00837 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
-00838 chain& c = s.get_chain( h, n_segment_bits );
-00839 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
-00840 node** p = &c.node_list;
-00841 <span class="keywordflow">while</span>( *p && *p != b )
-00842 p = &(*p)->next;
-00843 <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
-00844 item_accessor.my_lock.release();
-00845 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00846 }
-00847 __TBB_ASSERT( *p == b, NULL );
-00848 *p = b->next;
-00849 --s.my_logical_size;
-00850 }
-00851 <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
-00852 item_accessor.my_lock.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
-00853 item_accessor.my_lock.release();
-00854 delete_node( b ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
-00855 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00856 }
-00857
-00858 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00859"></a><a class="code" href="a00174.html#a18">00859</a> <span class="keywordtype">void</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
-00860 std::swap(this->my_allocator, table.<a class="code" href="a00174.html#r0">my_allocator</a>);
-00861 std::swap(this->my_hash_compare, table.<a class="code" href="a00174.html#r1">my_hash_compare</a>);
-00862 std::swap(this->my_segment, table.<a class="code" href="a00174.html#r2">my_segment</a>);
-00863 }
-00864
-00865 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-<a name="l00866"></a><a class="code" href="a00174.html#a4">00866</a> <span class="keywordtype">void</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
-00867 <span class="preprocessor">#if TBB_PERFORMANCE_WARNINGS</span>
-00868 <span class="preprocessor"></span> size_t total_physical_size = 0, min_physical_size = size_t(-1L), max_physical_size = 0; <span class="comment">//< usage statistics</span>
-00869 <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
-00870 <span class="preprocessor">#endif</span>
-00871 <span class="preprocessor"></span> <span class="keywordflow">for</span>( size_t i=0; i<n_segment; ++i ) {
-00872 segment& s = my_segment[i];
-00873 size_t n = s.my_physical_size;
-00874 <span class="keywordflow">if</span>( chain* array = s.my_array ) {
-00875 s.my_array = NULL;
-00876 s.my_physical_size = 0;
-00877 s.my_logical_size = 0;
-00878 <span class="keywordflow">for</span>( size_t j=0; j<n; ++j ) {
-00879 <span class="keywordflow">while</span>( node* b = array[j].node_list ) {
-00880 array[j].node_list = b->next;
-00881 delete_node(b);
-00882 }
-00883 }
-00884 <a class="code" href="a00172.html">cache_aligned_allocator<chain></a>().deallocate( array, n );
-00885 }
-00886 <span class="preprocessor">#if TBB_PERFORMANCE_WARNINGS</span>
-00887 <span class="preprocessor"></span> total_physical_size += n;
-00888 <span class="keywordflow">if</span>(min_physical_size > n) min_physical_size = n;
-00889 <span class="keywordflow">if</span>(max_physical_size < n) max_physical_size = n;
-00890 }
-00891 <span class="keywordflow">if</span>( !reported
-00892 && ( (total_physical_size >= n_segment*48 && min_physical_size < total_physical_size/n_segment/2)
-00893 || (total_physical_size >= n_segment*128 && max_physical_size > total_physical_size/n_segment*2) ) )
-00894 {
-00895 reported = <span class="keyword">true</span>;
-00896 internal::runtime_warning(
-00897 <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s"</span>,
-00898 <span class="keyword">typeid</span>(*this).name() );
-00899 <span class="preprocessor">#endif</span>
-00900 <span class="preprocessor"></span> }
-00901 }
-00902
-00903 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00904 <span class="keywordtype">void</span> <a class="code" href="a00174.html">concurrent_hash_map<Key,T,HashCompare,A>::grow_segment</a>( segment_mutex_t::scoped_lock& segment_lock, segment& s ) {
-00905 <span class="comment">// Following is second check in a double-check.</span>
-00906 <span class="keywordflow">if</span>( s.my_logical_size >= s.my_physical_size ) {
-00907 chain* old_array = s.my_array;
-00908 size_t old_size = s.my_physical_size;
-00909 s.allocate_array( s.my_logical_size+1 );
-00910 <span class="keywordflow">for</span>( size_t k=0; k<old_size; ++k )
-00911 <span class="keywordflow">while</span>( node* b = old_array[k].node_list ) {
-00912 old_array[k].node_list = b->next;
-00913 hashcode_t h = my_hash_compare.hash( b->item.first );
-00914 __TBB_ASSERT( &get_segment(h)==&s, <span class="stringliteral">"hash function changed?"</span> );
-00915 s.get_chain(h,n_segment_bits).push_front(*b);
-00916 }
-00917 cache_aligned_allocator<chain>().deallocate( old_array, old_size );
-00918 }
-00919 segment_lock.downgrade_to_reader();
-00920 }
-00921
-00922 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00923 <span class="keywordtype">void</span> concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( <span class="keyword">const</span> concurrent_hash_map& source ) {
-00924 <span class="keywordflow">for</span>( size_t i=0; i<n_segment; ++i ) {
-00925 segment& s = source.my_segment[i];
-00926 __TBB_ASSERT( !my_segment[i].my_array, <span class="stringliteral">"caller should have cleared"</span> );
-00927 <span class="keywordflow">if</span>( s.my_logical_size ) {
-00928 segment& d = my_segment[i];
-00929 d.allocate_array( s.my_logical_size );
-00930 d.my_logical_size = s.my_logical_size;
-00931 size_t s_size = s.my_physical_size;
-00932 chain* s_array = s.my_array;
-00933 chain* d_array = d.my_array;
-00934 <span class="keywordflow">for</span>( size_t k=0; k<s_size; ++k )
-00935 <span class="keywordflow">for</span>( node* b = s_array[k].node_list; b; b=b->next ) {
-00936 __TBB_ASSERT( &get_segment(my_hash_compare.hash( b->item.first ))==&d, <span class="stringliteral">"hash function changed?"</span> );
-00937 node* b_new = create_node(b->item.first, &b->item.second);
-00938 d_array[k].push_front(*b_new); <span class="comment">// hashcode is the same and segment and my_physical sizes are the same</span>
-00939 }
-00940 }
-00941 }
-00942 }
-00943
-00944 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00945 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00946 <span class="keywordtype">void</span> concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {
-00947 <span class="keywordflow">for</span>(; first != last; ++first)
-00948 <a class="code" href="a00174.html#a22">insert</a>( *first );
-00949 }
-00950
-00951 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2>
-00952 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A1> &a, <span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A2> &b) {
-00953 <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00954 <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
-00955 <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
-00956 <span class="keywordflow">for</span>(; i != i_end; ++i) {
-00957 j = b.equal_range(i->first).first;
-00958 <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00959 }
-00960 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00961 }
-00962
-00963 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2>
-00964 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A1> &a, <span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A2> &b)
-00965 { <span class="keywordflow">return</span> !(a == b); }
-00966
-00967 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
-00968 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)
-00969 { a.swap( b ); }
-00970
-00971 } <span class="comment">// namespace tbb</span>
-00972
-00973 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00290.html b/doc/html/a00290.html
deleted file mode 100644
index 4aa9616..0000000
--- a/doc/html/a00290.html
+++ /dev/null
@@ -1,327 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_queue.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-00026 <span class="preprocessor">#include "tbb_allocator.h"</span>
-00027 <span class="preprocessor">#include <new></span>
-00028
-00029 <span class="keyword">namespace </span>tbb {
-00030
-00031 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
-00032 <span class="keyword">class </span>concurrent_queue;
-00033
-00035 <span class="keyword">namespace </span>internal {
-00036
-00037 <span class="keyword">class </span>concurrent_queue_rep;
-00038 <span class="keyword">class </span>concurrent_queue_iterator_rep;
-00039 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
-00040 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
-00041
-00043
-<a name="l00045"></a><a class="code" href="a00178.html">00045</a> <span class="keyword">class </span><a class="code" href="a00178.html">concurrent_queue_base_v3</a>: <a class="code" href="a00200.html">no_copy</a> {
-00047 concurrent_queue_rep* my_rep;
-00048
-00049 <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
-00050 <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
-00051 <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
-00052 <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
-00053 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>;
-00054 <span class="keyword">protected</span>:
-<a name="l00056"></a><a class="code" href="a00179.html">00056</a> <span class="keyword">struct </span><a class="code" href="a00179.html">page</a> {
-00057 <a class="code" href="a00179.html">page</a>* next;
-00058 <a class="code" href="a00279.html#a13">uintptr</a> mask;
-00059 };
-00060
-<a name="l00062"></a><a class="code" href="a00178.html#p0">00062</a> ptrdiff_t my_capacity;
-00063
-<a name="l00065"></a><a class="code" href="a00178.html#p1">00065</a> size_t items_per_page;
-00066
-<a name="l00068"></a><a class="code" href="a00178.html#p2">00068</a> size_t item_size;
-00069
-00070 <span class="keyword">private</span>:
-00071 <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( <a class="code" href="a00179.html">page</a>& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) = 0;
-00072 <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, <a class="code" href="a00179.html">page</a>& src, size_t index ) = 0;
-00073 <span class="keyword">protected</span>:
-00074 <a class="code" href="a00178.html">concurrent_queue_base_v3</a>( size_t item_size );
-00075 <span class="keyword">virtual</span> ~<a class="code" href="a00178.html">concurrent_queue_base_v3</a>();
-00076
-00078 <span class="keywordtype">void</span> internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-00079
-00081 <span class="keywordtype">void</span> internal_pop( <span class="keywordtype">void</span>* dst );
-00082
-00084 <span class="keywordtype">bool</span> internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-00085
-00087
-00088 <span class="keywordtype">bool</span> internal_pop_if_present( <span class="keywordtype">void</span>* dst );
-00089
-00091 ptrdiff_t internal_size() <span class="keyword">const</span>;
-00092
-00094 <span class="keywordtype">void</span> internal_set_capacity( ptrdiff_t capacity, size_t element_size );
-00095
-00097 <span class="keyword">virtual</span> <a class="code" href="a00179.html">page</a> *allocate_page() = 0;
-00098
-00100 <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( <a class="code" href="a00179.html">page</a> *p ) = 0;
-00101
-00103 <span class="keywordtype">void</span> internal_finish_clear() ;
-00104
-00106 <span class="keywordtype">void</span> internal_throw_exception() <span class="keyword">const</span>;
-00107 };
-00108
-00109 <span class="keyword">typedef</span> <a class="code" href="a00178.html">concurrent_queue_base_v3</a> <a class="code" href="a00178.html">concurrent_queue_base</a> ;
-00110
-00112
-<a name="l00113"></a><a class="code" href="a00181.html">00113</a> <span class="keyword">class </span><a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a> {
-00115
-00116 concurrent_queue_iterator_rep* my_rep;
-00117
-00118 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00119 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator<C,U></a>& j );
-00120
-00121 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00122 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator<C,U></a>& j );
-00123 <span class="keyword">protected</span>:
-<a name="l00125"></a><a class="code" href="a00181.html#p0">00125</a> <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
-00126
-<a name="l00128"></a><a class="code" href="a00181.html#b0">00128</a> <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>() : my_rep(NULL), my_item(NULL) {}
-00129
-<a name="l00131"></a><a class="code" href="a00181.html#b1">00131</a> <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>( <span class="keyword">const</span> <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>& i ) : my_rep(NULL), my_item(NULL) {
-00132 assign(i);
-00133 }
-00134
-00136 <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>( <span class="keyword">const</span> concurrent_queue_base& queue );
-00137
-00139 <span class="keywordtype">void</span> assign( <span class="keyword">const</span> <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>& i );
-00140
-00142 <span class="keywordtype">void</span> advance();
-00143
-00145 ~<a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>();
-00146 };
-00147
-00148 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
-00149
-00151
-00153 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00154"></a><a class="code" href="a00180.html">00154</a> <span class="keyword">class </span><a class="code" href="a00180.html">concurrent_queue_iterator</a>: <span class="keyword">public</span> <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a> {
-00155 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-00156 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00157 <span class="keyword">friend</span> class ::tbb::concurrent_queue;
-00158 <span class="preprocessor">#else</span>
-00159 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-00160 <span class="preprocessor">#endif </span>
-00161 <span class="preprocessor"></span>
-00162 <a class="code" href="a00180.html">concurrent_queue_iterator</a>( <span class="keyword">const</span> concurrent_queue_base& queue ) :
-00163 <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>(queue)
-00164 {
-00165 }
-00166 <span class="keyword">public</span>:
-00167 <a class="code" href="a00180.html">concurrent_queue_iterator</a>() {}
-00168
-<a name="l00171"></a><a class="code" href="a00180.html#a1">00171</a> <a class="code" href="a00180.html">concurrent_queue_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator<Container,typename Container::value_type></a>& other ) :
-00172 <a class="code" href="a00181.html">concurrent_queue_iterator_base_v3</a>(other)
-00173 {}
-00174
-<a name="l00176"></a><a class="code" href="a00180.html#a2">00176</a> <a class="code" href="a00180.html">concurrent_queue_iterator</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00180.html">concurrent_queue_iterator</a>& other ) {
-00177 assign(other);
-00178 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00179 }
-00180
-<a name="l00182"></a><a class="code" href="a00180.html#a3">00182</a> Value& operator*()<span class="keyword"> const </span>{
-00183 <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
-00184 }
-00185
-00186 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-00187
-<a name="l00189"></a><a class="code" href="a00180.html#a5">00189</a> <a class="code" href="a00180.html">concurrent_queue_iterator</a>& operator++() {
-00190 advance();
-00191 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00192 }
-00193
-<a name="l00195"></a><a class="code" href="a00180.html#a6">00195</a> Value* operator++(<span class="keywordtype">int</span>) {
-00196 Value* result = &operator*();
-00197 operator++();
-00198 <span class="keywordflow">return</span> result;
-00199 }
-00200 }; <span class="comment">// concurrent_queue_iterator</span>
-00201
-00202
-00203 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00204 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-00205 <span class="keywordflow">return</span> i.my_item==j.my_item;
-00206 }
-00207
-00208 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00209 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
-00210 <span class="keywordflow">return</span> i.my_item!=j.my_item;
-00211 }
-00212
-00213 } <span class="comment">// namespace internal;</span>
-00214
-00216
-00218
-00221 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00222"></a><a class="code" href="a00177.html">00222</a> <span class="keyword">class </span><a class="code" href="a00177.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3 {
-00223 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00180.html">internal::concurrent_queue_iterator</a>;
-00224
-00226 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
-00227 page_allocator_type my_allocator;
-00228
-00230 <span class="keyword">class </span>destroyer {
-00231 T& my_value;
-00232 <span class="keyword">public</span>:
-00233 destroyer( T& value ) : my_value(value) {}
-00234 ~destroyer() {my_value.~T();}
-00235 };
-00236
-00237 T& get_ref( page& page, size_t index ) {
-00238 __TBB_ASSERT( index<items_per_page, NULL );
-00239 <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
-00240 }
-00241
-00242 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
-00243 <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
-00244 }
-00245
-00246 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
-00247 T& from = get_ref(src,index);
-00248 destroyer d(from);
-00249 *static_cast<T*>(dst) = from;
-00250 }
-00251
-00252 <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> page *allocate_page() {
-00253 size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
-00254 page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
-00255 <span class="keywordflow">if</span>( !p ) internal_throw_exception();
-00256 <span class="keywordflow">return</span> p;
-00257 }
-00258
-00259 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
-00260 size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
-00261 my_allocator.deallocate( reinterpret_cast<char*>(p), n );
-00262 }
-00263
-00264 <span class="keyword">public</span>:
-<a name="l00266"></a><a class="code" href="a00177.html#w0">00266</a> <span class="keyword">typedef</span> T value_type;
-00267
-<a name="l00269"></a><a class="code" href="a00177.html#w1">00269</a> <span class="keyword">typedef</span> A allocator_type;
-00270
-<a name="l00272"></a><a class="code" href="a00177.html#w2">00272</a> <span class="keyword">typedef</span> T& reference;
-00273
-<a name="l00275"></a><a class="code" href="a00177.html#w3">00275</a> <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00276
-00278
-<a name="l00280"></a><a class="code" href="a00177.html#w4">00280</a> <span class="keyword">typedef</span> std::ptrdiff_t size_type;
-00281
-<a name="l00283"></a><a class="code" href="a00177.html#w5">00283</a> <span class="keyword">typedef</span> std::ptrdiff_t difference_type;
-00284
-<a name="l00286"></a><a class="code" href="a00177.html#a0">00286</a> <a class="code" href="a00177.html">concurrent_queue</a>(<span class="keyword">const</span> allocator_type &a = allocator_type()) :
-00287 concurrent_queue_base_v3( sizeof(T) )
-00288 , my_allocator( a )
-00289 {
-00290 }
-00291
-00293 ~<a class="code" href="a00177.html">concurrent_queue</a>();
-00294
-<a name="l00296"></a><a class="code" href="a00177.html#a2">00296</a> <span class="keywordtype">void</span> push( <span class="keyword">const</span> T& source ) {
-00297 internal_push( &source );
-00298 }
-00299
-00301
-<a name="l00302"></a><a class="code" href="a00177.html#a3">00302</a> <span class="keywordtype">void</span> pop( T& destination ) {
-00303 internal_pop( &destination );
-00304 }
-00305
-00307
-<a name="l00309"></a><a class="code" href="a00177.html#a4">00309</a> <span class="keywordtype">bool</span> push_if_not_full( <span class="keyword">const</span> T& source ) {
-00310 <span class="keywordflow">return</span> internal_push_if_not_full( &source );
-00311 }
-00312
-00314
-<a name="l00316"></a><a class="code" href="a00177.html#a5">00316</a> <span class="keywordtype">bool</span> pop_if_present( T& destination ) {
-00317 <span class="keywordflow">return</span> internal_pop_if_present( &destination );
-00318 }
-00319
-00321
-<a name="l00324"></a><a class="code" href="a00177.html#a6">00324</a> size_type size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
-00325
-<a name="l00327"></a><a class="code" href="a00177.html#a7">00327</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()<=0;}
-00328
-<a name="l00330"></a><a class="code" href="a00177.html#a8">00330</a> size_type capacity()<span class="keyword"> const </span>{
-00331 <span class="keywordflow">return</span> my_capacity;
-00332 }
-00333
-00335
-<a name="l00337"></a><a class="code" href="a00177.html#a9">00337</a> <span class="keywordtype">void</span> set_capacity( size_type capacity ) {
-00338 internal_set_capacity( capacity, <span class="keyword">sizeof</span>(T) );
-00339 }
-00340
-<a name="l00342"></a><a class="code" href="a00177.html#a10">00342</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-00343
-00345 <span class="keywordtype">void</span> clear() ;
-00346
-00347 <span class="keyword">typedef</span> <a class="code" href="a00180.html">internal::concurrent_queue_iterator<concurrent_queue,T></a> iterator;
-00348 <span class="keyword">typedef</span> <a class="code" href="a00180.html">internal::concurrent_queue_iterator<concurrent_queue,const T></a> const_iterator;
-00349
-00350 <span class="comment">//------------------------------------------------------------------------</span>
-00351 <span class="comment">// The iterators are intended only for debugging. They are slow and not thread safe.</span>
-00352 <span class="comment">//------------------------------------------------------------------------</span>
-00353 iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
-00354 iterator end() {<span class="keywordflow">return</span> iterator();}
-00355 const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
-00356 const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
-00357
-00358 };
-00359
-00360 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00361"></a><a class="code" href="a00177.html#a1">00361</a> <a class="code" href="a00177.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
-00362 <a class="code" href="a00177.html#a11">clear</a>();
-00363 }
-00364
-00365 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00366"></a><a class="code" href="a00177.html#a11">00366</a> <span class="keywordtype">void</span> <a class="code" href="a00177.html">concurrent_queue<T,A>::clear</a>() {
-00367 <span class="keywordflow">while</span>( !<a class="code" href="a00177.html#a7">empty</a>() ) {
-00368 T value;
-00369 <a class="code" href="a00178.html#b5">internal_pop_if_present</a>(&value);
-00370 }
-00371 <a class="code" href="a00178.html#b10">internal_finish_clear</a>();
-00372 }
-00373
-00374 } <span class="comment">// namespace tbb</span>
-00375
-00376 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00291.html b/doc/html/a00291.html
deleted file mode 100644
index 470f475..0000000
--- a/doc/html/a00291.html
+++ /dev/null
@@ -1,787 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>concurrent_vector.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>concurrent_vector.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_concurrent_vector_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_vector_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025 <span class="preprocessor">#include <algorithm></span>
-00026 <span class="preprocessor">#include <iterator></span>
-00027 <span class="preprocessor">#include <memory></span>
-00028 <span class="preprocessor">#include <limits></span>
-00029 <span class="preprocessor">#include <new></span>
-00030 <span class="preprocessor">#include <cstring></span>
-00031 <span class="preprocessor">#include "atomic.h"</span>
-00032 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
-00033 <span class="preprocessor">#include "blocked_range.h"</span>
-00034
-00035 <span class="preprocessor">#include "tbb_machine.h"</span>
-00036
-00037 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-00038 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
-00039 <span class="preprocessor"> #pragma warning (push)</span>
-00040 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4267)</span>
-00041 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && _Wp64 */</span>
-00042
-00043 <span class="keyword">namespace </span>tbb {
-00044
-00045 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
-00046 <span class="keyword">class </span>concurrent_vector;
-00047
-00049 <span class="preprocessor">#define __TBB_BAD_ALLOC reinterpret_cast<void*>(63)</span>
-00050 <span class="preprocessor"></span>
-00052 <span class="keyword">namespace </span>internal {
-00053
-00055
-<a name="l00056"></a><a class="code" href="a00183.html">00056</a> <span class="keyword">class </span><a class="code" href="a00183.html">concurrent_vector_base_v3</a> {
-00057 <span class="keyword">protected</span>:
-00058
-00059 <span class="comment">// Basic types declarations</span>
-00060 <span class="keyword">typedef</span> size_t segment_index_t;
-00061 <span class="keyword">typedef</span> size_t size_type;
-00062
-00063 <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
-00064 <span class="keyword">enum</span> {
-00065 <span class="comment">// Size constants</span>
-00066 default_initial_segments = 1, <span class="comment">// 2 initial items</span>
-00068 <span class="comment"></span> pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
-00069 pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
-00070 };
-00071
-00072 <span class="comment">// Segment pointer. Can be zero-initialized</span>
-00073 <span class="keyword">struct </span>segment_t {
-00074 <span class="keywordtype">void</span>* array;
-00075 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00076 <span class="preprocessor"></span> ~segment_t() {
-00077 __TBB_ASSERT( array <= __TBB_BAD_ALLOC, <span class="stringliteral">"should have been freed by clear"</span> );
-00078 }
-00079 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00080 };
-00081
-00082 <span class="comment">// Data fields</span>
-00083
-00085 <span class="keywordtype">void</span>* (*vector_allocator_ptr)(<a class="code" href="a00183.html">concurrent_vector_base_v3</a> &, size_t);
-00086
-<a name="l00088"></a><a class="code" href="a00183.html#p1">00088</a> <a class="code" href="a00165.html">atomic<size_type></a> my_first_block;
-00089
-<a name="l00091"></a><a class="code" href="a00183.html#p2">00091</a> <a class="code" href="a00165.html">atomic<size_type></a> my_early_size;
-00092
-<a name="l00094"></a><a class="code" href="a00183.html#p3">00094</a> <a class="code" href="a00165.html">atomic<segment_t*></a> my_segment;
-00095
-<a name="l00097"></a><a class="code" href="a00183.html#p4">00097</a> segment_t my_storage[pointers_per_short_table];
-00098
-00099 <span class="comment">// Methods</span>
-00100
-00101 concurrent_vector_base_v3() {
-00102 my_early_size = 0;
-00103 my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
-00104 <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
-00105 my_storage[i].array = NULL;
-00106 my_segment = my_storage;
-00107 }
-00108 ~concurrent_vector_base_v3();
-00109
-00110 <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
-00111 <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
-00112 }
-00113
-00114 <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
-00115 <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
-00116 }
-00117
-00118 <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
-00119 segment_index_t k = segment_index_of( index );
-00120 index -= segment_base(k);
-00121 <span class="keywordflow">return</span> k;
-00122 }
-00123
-00124 <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
-00125 <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
-00126 }
-00127
-<a name="l00129"></a><a class="code" href="a00183.html#x2">00129</a> <span class="keyword">typedef</span> void(*internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
-00130
-<a name="l00132"></a><a class="code" href="a00183.html#x3">00132</a> <span class="keyword">typedef</span> void(*internal_array_op2)(<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
-00133
-<a name="l00135"></a><a class="code" href="a00184.html">00135</a> <span class="keyword">struct </span><a class="code" href="a00184.html">internal_segments_table</a> {
-00136 segment_index_t first_block;
-00137 <span class="keywordtype">void</span>* table[pointers_per_long_table];
-00138 };
-00139
-00140 <span class="keywordtype">void</span> internal_reserve( size_type n, size_type element_size, size_type max_size );
-00141 size_type internal_capacity() <span class="keyword">const</span>;
-00142 <span class="keywordtype">void</span> internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-00143 <span class="keywordtype">void</span> internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-00144 size_type internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
-00145 <span class="keywordtype">void</span>* internal_push_back( size_type element_size, size_type& index );
-00146 segment_index_t internal_clear( internal_array_op1 destroy );
-00147 <span class="keywordtype">void</span>* internal_compact( size_type element_size, <span class="keywordtype">void</span> *table, internal_array_op1 destroy, internal_array_op2 copy );
-00148 <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );
-00149 <span class="keywordtype">void</span> internal_assign( <span class="keyword">const</span> concurrent_vector_base_v3& src, size_type element_size,
-00150 internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
-00151 <span class="keywordtype">void</span> internal_throw_exception(size_type) <span class="keyword">const</span>;
-00152 <span class="keywordtype">void</span> internal_swap(concurrent_vector_base_v3& v);
-00153
-00154 <span class="keyword">private</span>:
-00156 <span class="keyword">class </span>helper;
-00157 <span class="keyword">friend</span> <span class="keyword">class </span>helper;
-00158 };
-00159
-00160 <span class="keyword">typedef</span> concurrent_vector_base_v3 <a class="code" href="a00183.html">concurrent_vector_base</a>;
-00161
-00162 <span class="comment">//TODO[?]: deal with _Range_checked_iterator_tag of MSVC</span>
-00164 <span class="comment"></span>
-00166 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
-<a name="l00167"></a><a class="code" href="a00238.html">00167</a> <span class="keyword">class </span><a class="code" href="a00238.html">vector_iterator</a>
-00168 #if defined(_WIN64) && defined(_MSC_VER)
-00169 <span class="comment">// Ensure that Microsoft's internal template function _Val_type works correctly.</span>
-00170 : public std::iterator<std::random_access_iterator_tag,Value>
-00171 #endif <span class="comment">/* defined(_WIN64) && defined(_MSC_VER) */</span>
-00172 {
-00174 Container* my_vector;
-00175
-00177 size_t my_index;
-00178
-00180
-00181 <span class="keyword">mutable</span> Value* my_item;
-00182
-00183 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
-00184 <span class="keyword">friend</span> <a class="code" href="a00238.html">vector_iterator<C,T></a> operator+( ptrdiff_t offset, <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,T></a>& v );
-00185
-00186 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00187 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,U></a>& j );
-00188
-00189 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00190 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const vector_iterator<C,T>& i, <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,U></a>& j );
-00191
-00192 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00193 <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<C,U></a>& j );
-00194
-00195 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-00196 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00238.html">internal::vector_iterator</a>;
-00197
-00198 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
-00199 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00200 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00182.html">tbb::concurrent_vector</a>;
-00201 <span class="preprocessor">#else</span>
-00202 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
-00203 <span class="preprocessor">#endif </span>
-00204 <span class="preprocessor"></span>
-00205 <a class="code" href="a00238.html">vector_iterator</a>( <span class="keyword">const</span> Container& vector, size_t index ) :
-00206 my_vector(const_cast<Container*>(&vector)),
-00207 my_index(index),
-00208 my_item(NULL)
-00209 {}
-00210
-00211 <span class="keyword">public</span>:
-<a name="l00213"></a><a class="code" href="a00238.html#a0">00213</a> <a class="code" href="a00238.html">vector_iterator</a>() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
-00214
-00215 <a class="code" href="a00238.html">vector_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00238.html">vector_iterator<Container,typename Container::value_type></a>& other ) :
-00216 my_vector(other.my_vector),
-00217 my_index(other.my_index),
-00218 my_item(other.my_item)
-00219 {}
-00220
-00221 vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
-00222 <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
-00223 }
-00224 vector_iterator operator+=( ptrdiff_t offset ) {
-00225 my_index+=offset;
-00226 my_item = NULL;
-00227 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00228 }
-00229 vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
-00230 <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
-00231 }
-00232 vector_iterator operator-=( ptrdiff_t offset ) {
-00233 my_index-=offset;
-00234 my_item = NULL;
-00235 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00236 }
-00237 Value& operator*()<span class="keyword"> const </span>{
-00238 Value* item = my_item;
-00239 <span class="keywordflow">if</span>( !item ) {
-00240 item = my_item = &my_vector->internal_subscript(my_index);
-00241 }
-00242 __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
-00243 <span class="keywordflow">return</span> *item;
-00244 }
-00245 Value& <a class="code" href="a00182.html#a12">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
-00246 <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
-00247 }
-00248 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
-00249
-<a name="l00251"></a><a class="code" href="a00238.html#a9">00251</a> <a class="code" href="a00238.html">vector_iterator</a>& operator++() {
-00252 size_t k = ++my_index;
-00253 <span class="keywordflow">if</span>( my_item ) {
-00254 <span class="comment">// Following test uses 2's-complement wizardry</span>
-00255 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-00256 <span class="comment">// k is a power of two that is at least k-2</span>
-00257 my_item= NULL;
-00258 } <span class="keywordflow">else</span> {
-00259 ++my_item;
-00260 }
-00261 }
-00262 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00263 }
-00264
-<a name="l00266"></a><a class="code" href="a00238.html#a10">00266</a> <a class="code" href="a00238.html">vector_iterator</a>& operator--() {
-00267 __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> );
-00268 size_t k = my_index--;
-00269 <span class="keywordflow">if</span>( my_item ) {
-00270 <span class="comment">// Following test uses 2's-complement wizardry</span>
-00271 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
-00272 <span class="comment">// k is a power of two that is at least k-2 </span>
-00273 my_item= NULL;
-00274 } <span class="keywordflow">else</span> {
-00275 --my_item;
-00276 }
-00277 }
-00278 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00279 }
-00280
-<a name="l00282"></a><a class="code" href="a00238.html#a11">00282</a> <a class="code" href="a00238.html">vector_iterator</a> operator++(<span class="keywordtype">int</span>) {
-00283 <a class="code" href="a00238.html">vector_iterator</a> result = *<span class="keyword">this</span>;
-00284 operator++();
-00285 <span class="keywordflow">return</span> result;
-00286 }
-00287
-<a name="l00289"></a><a class="code" href="a00238.html#a12">00289</a> <a class="code" href="a00238.html">vector_iterator</a> operator--(<span class="keywordtype">int</span>) {
-00290 <a class="code" href="a00238.html">vector_iterator</a> result = *<span class="keyword">this</span>;
-00291 operator--();
-00292 <span class="keywordflow">return</span> result;
-00293 }
-00294
-00295 <span class="comment">// STL support</span>
-00296
-00297 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00298 <span class="keyword">typedef</span> Value value_type;
-00299 <span class="keyword">typedef</span> Value* pointer;
-00300 <span class="keyword">typedef</span> Value& reference;
-00301 <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
-00302 };
-00303
-00304 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
-00305 vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
-00306 <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
-00307 }
-00308
-00309 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00310 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00311 <span class="keywordflow">return</span> i.<a class="code" href="a00238.html#r1">my_index</a>==j.<a class="code" href="a00238.html#r1">my_index</a>;
-00312 }
-00313
-00314 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00315 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00316 <span class="keywordflow">return</span> !(i==j);
-00317 }
-00318
-00319 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00320 <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00321 <span class="keywordflow">return</span> i.<a class="code" href="a00238.html#r1">my_index</a><j.<a class="code" href="a00238.html#r1">my_index</a>;
-00322 }
-00323
-00324 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00325 <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00326 <span class="keywordflow">return</span> j<i;
-00327 }
-00328
-00329 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00330 <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00331 <span class="keywordflow">return</span> !(i<j);
-00332 }
-00333
-00334 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00335 <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00336 <span class="keywordflow">return</span> !(j<i);
-00337 }
-00338
-00339 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00340 ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
-00341 <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
-00342 }
-00343
-00344 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00345 <span class="keyword">class </span>allocator_base {
-00346 <span class="keyword">public</span>:
-00347 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
-00348 rebind<T>::other allocator_type;
-00349 allocator_type my_allocator;
-00350
-00351 allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
-00352 };
-00353
-00354 } <span class="comment">// namespace internal</span>
-00356 <span class="comment"></span>
-00358
-00413 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00414"></a><a class="code" href="a00182.html">00414</a> <span class="keyword">class </span><a class="code" href="a00182.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
-00415 <span class="keyword">private</span> internal::concurrent_vector_base_v3 {
-00416 <span class="keyword">private</span>:
-00417 <span class="keyword">template</span><<span class="keyword">typename</span> I>
-00418 <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00169.html">blocked_range</a><I> {
-00419 <span class="keyword">public</span>:
-00420 <span class="keyword">typedef</span> T value_type;
-00421 <span class="keyword">typedef</span> T& reference;
-00422 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00423 <span class="keyword">typedef</span> I <a class="code" href="a00238.html">iterator</a>;
-00424 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00425 generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00169.html">blocked_range<I></a>(begin_,end_,grainsize) {}
-00426 <span class="keyword">template</span><<span class="keyword">typename</span> U>
-00427 generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00169.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {}
-00428 generic_range_type( generic_range_type& r, <a class="code" href="a00221.html">split</a> ) : <a class="code" href="a00169.html">blocked_range<I></a>(r,<a class="code" href="a00221.html">split</a>()) {}
-00429 };
-00430
-00431 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
-00432 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00238.html">internal::vector_iterator</a>;
-00433 <span class="keyword">public</span>:
-00434 <span class="comment">//------------------------------------------------------------------------</span>
-00435 <span class="comment">// STL compatible types</span>
-00436 <span class="comment">//------------------------------------------------------------------------</span>
-00437 <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
-00438 <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
-00439
-00440 <span class="keyword">typedef</span> T value_type;
-00441 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00442 <span class="keyword">typedef</span> T& reference;
-00443 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00444 <span class="keyword">typedef</span> T *pointer;
-00445 <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
-00446
-00447 <span class="keyword">typedef</span> <a class="code" href="a00238.html">internal::vector_iterator<concurrent_vector,T></a> <a class="code" href="a00238.html">iterator</a>;
-00448 <span class="keyword">typedef</span> <a class="code" href="a00238.html">internal::vector_iterator<concurrent_vector,const T></a> <a class="code" href="a00238.html">const_iterator</a>;
-00449
-00450 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
-00451 <span class="preprocessor"></span> <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
-00452 <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
-00453 <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
-00454 <span class="preprocessor">#else</span>
-00455 <span class="preprocessor"></span> <span class="comment">// Use non-standard std::reverse_iterator</span>
-00456 <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
-00457 <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
-00458 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
-00459
-00460 <span class="comment">//------------------------------------------------------------------------</span>
-00461 <span class="comment">// Parallel algorithm support</span>
-00462 <span class="comment">//------------------------------------------------------------------------</span>
-00463 <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
-00464 <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
-00465
-00466 <span class="comment">//------------------------------------------------------------------------</span>
-00467 <span class="comment">// STL compatible constructors & destructors</span>
-00468 <span class="comment">//------------------------------------------------------------------------</span>
-00469
-<a name="l00471"></a><a class="code" href="a00182.html#a0">00471</a> <span class="keyword">explicit</span> <a class="code" href="a00182.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
-00472 : internal::allocator_base<T, A>(a)
-00473 {
-00474 vector_allocator_ptr = &internal_allocator;
-00475 }
-00476
-<a name="l00478"></a><a class="code" href="a00182.html#a1">00478</a> <a class="code" href="a00182.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00182.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-00479 : internal::allocator_base<T, A>(a)
-00480 {
-00481 vector_allocator_ptr = &internal_allocator;
-00482 internal_copy(vector, <span class="keyword">sizeof</span>(T), ©_array);
-00483 }
-00484
-00486 <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00487"></a><a class="code" href="a00182.html#a2">00487</a> <a class="code" href="a00182.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00182.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
-00488 : internal::allocator_base<T, A>(a)
-00489 {
-00490 vector_allocator_ptr = &internal_allocator;
-00491 internal_copy(vector.<a class="code" href="a00182.html#a42">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), ©_array);
-00492 }
-00493
-<a name="l00495"></a><a class="code" href="a00182.html#a3">00495</a> <span class="keyword">explicit</span> <a class="code" href="a00182.html">concurrent_vector</a>(size_type n)
-00496 {
-00497 vector_allocator_ptr = &internal_allocator;
-00498 <span class="keywordflow">if</span> ( !n ) <span class="keywordflow">return</span>;
-00499 internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size()); my_early_size = n;
-00500 __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
-00501 initialize_array(static_cast<T*>(my_segment[0].array), NULL, n);
-00502 }
-00503
-<a name="l00505"></a><a class="code" href="a00182.html#a4">00505</a> <a class="code" href="a00182.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
-00506 : internal::allocator_base<T, A>(a)
-00507 {
-00508 vector_allocator_ptr = &internal_allocator;
-00509 internal_assign( n, t );
-00510 }
-00511
-00513 <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00514"></a><a class="code" href="a00182.html#a5">00514</a> <a class="code" href="a00182.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
-00515 : internal::allocator_base<T, A>(a)
-00516 {
-00517 vector_allocator_ptr = &internal_allocator;
-00518 internal_assign(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-00519 }
-00520
-<a name="l00522"></a><a class="code" href="a00182.html#a6">00522</a> <a class="code" href="a00182.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00182.html">concurrent_vector</a>& vector ) {
-00523 <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
-00524 concurrent_vector_base_v3::internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, ©_array);
-00525 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00526 }
-00527
-00529 <span class="keyword">template</span><<span class="keyword">class</span> M>
-<a name="l00530"></a><a class="code" href="a00182.html#a7">00530</a> <a class="code" href="a00182.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00182.html">concurrent_vector<T, M></a>& vector ) {
-00531 <span class="keywordflow">if</span>( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )
-00532 concurrent_vector_base_v3::internal_assign(vector.<a class="code" href="a00182.html#a42">internal_vector_base</a>(),
-00533 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, ©_array);
-00534 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
-00535 }
-00536
-00537 <span class="comment">//------------------------------------------------------------------------</span>
-00538 <span class="comment">// Concurrent operations</span>
-00539 <span class="comment">//------------------------------------------------------------------------</span>
-00541 <span class="comment"></span>
-<a name="l00542"></a><a class="code" href="a00182.html#a8">00542</a> size_type grow_by( size_type delta ) {
-00543 <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
-00544 }
-00545
-00547
-<a name="l00548"></a><a class="code" href="a00182.html#a9">00548</a> size_type grow_by( size_type delta, const_reference t ) {
-00549 <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size;
-00550 }
-00551
-<a name="l00553"></a><a class="code" href="a00182.html#a10">00553</a> <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
-00554 <span class="keywordflow">if</span>( my_early_size<n )
-00555 internal_grow_to_at_least( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
-00556 };
-00557
-<a name="l00559"></a><a class="code" href="a00182.html#a11">00559</a> size_type push_back( const_reference item ) {
-00560 size_type k;
-00561 internal_loop_guide loop(1, internal_push_back(<span class="keyword">sizeof</span>(T),k));
-00562 loop.init(&item);
-00563 <span class="keywordflow">return</span> k;
-00564 }
-00565
-00567
-<a name="l00569"></a><a class="code" href="a00182.html#a12">00569</a> reference operator[]( size_type index ) {
-00570 <span class="keywordflow">return</span> internal_subscript(index);
-00571 }
-00572
-<a name="l00574"></a><a class="code" href="a00182.html#a13">00574</a> const_reference operator[]( size_type index )<span class="keyword"> const </span>{
-00575 <span class="keywordflow">return</span> internal_subscript(index);
-00576 }
-00577
-<a name="l00579"></a><a class="code" href="a00182.html#a14">00579</a> reference at( size_type index ) {
-00580 <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-00581 }
-00582
-<a name="l00584"></a><a class="code" href="a00182.html#a15">00584</a> const_reference at( size_type index )<span class="keyword"> const </span>{
-00585 <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
-00586 }
-00587
-<a name="l00589"></a><a class="code" href="a00182.html#a16">00589</a> range_type range( size_t grainsize = 1) {
-00590 <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
-00591 }
-00592
-<a name="l00594"></a><a class="code" href="a00182.html#a17">00594</a> const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
-00595 <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
-00596 }
-00597 <span class="comment">//------------------------------------------------------------------------</span>
-00598 <span class="comment">// Capacity</span>
-00599 <span class="comment">//------------------------------------------------------------------------</span>
-<a name="l00601"></a><a class="code" href="a00182.html#a18">00601</a> <span class="comment"></span> size_type size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_early_size;}
-00602
-<a name="l00604"></a><a class="code" href="a00182.html#a19">00604</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
-00605
-<a name="l00607"></a><a class="code" href="a00182.html#a20">00607</a> size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
-00608
-00610
-<a name="l00612"></a><a class="code" href="a00182.html#a21">00612</a> <span class="keywordtype">void</span> reserve( size_type n ) {
-00613 <span class="keywordflow">if</span>( n )
-00614 internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
-00615 }
-00616
-00618 <span class="keywordtype">void</span> compact();
-00619
-<a name="l00621"></a><a class="code" href="a00182.html#a23">00621</a> size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(T);}
-00622
-00623 <span class="comment">//------------------------------------------------------------------------</span>
-00624 <span class="comment">// STL support</span>
-00625 <span class="comment">//------------------------------------------------------------------------</span>
-00626
-<a name="l00628"></a><a class="code" href="a00182.html#a24">00628</a> <a class="code" href="a00238.html">iterator</a> begin() {<span class="keywordflow">return</span> <a class="code" href="a00238.html">iterator</a>(*<span class="keyword">this</span>,0);}
-<a name="l00630"></a><a class="code" href="a00182.html#a25">00630</a> <a class="code" href="a00238.html">iterator</a> end() {<span class="keywordflow">return</span> <a class="code" href="a00238.html">iterator</a>(*<span class="keyword">this</span>,size());}
-<a name="l00632"></a><a class="code" href="a00182.html#a26">00632</a> <a class="code" href="a00238.html">const_iterator</a> begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00238.html">const_iterator</a>(*<span class="keyword">this</span>,0);}
-<a name="l00634"></a><a class="code" href="a00182.html#a27">00634</a> <a class="code" href="a00238.html">const_iterator</a> end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00238.html">const_iterator</a>(*<span class="keyword">this</span>,size());}
-<a name="l00636"></a><a class="code" href="a00182.html#a28">00636</a> reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
-<a name="l00638"></a><a class="code" href="a00182.html#a29">00638</a> reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
-<a name="l00640"></a><a class="code" href="a00182.html#a30">00640</a> const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
-<a name="l00642"></a><a class="code" href="a00182.html#a31">00642</a> const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
-<a name="l00644"></a><a class="code" href="a00182.html#a32">00644</a> reference front() {
-00645 __TBB_ASSERT( size()>0, NULL);
-00646 <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
-00647 }
-<a name="l00649"></a><a class="code" href="a00182.html#a33">00649</a> const_reference front()<span class="keyword"> const </span>{
-00650 __TBB_ASSERT( size()>0, NULL);
-00651 <span class="keywordflow">return</span> static_cast<const T*>(my_segment[0].array)[0];
-00652 }
-<a name="l00654"></a><a class="code" href="a00182.html#a34">00654</a> reference back() {
-00655 __TBB_ASSERT( size()>0, NULL);
-00656 <span class="keywordflow">return</span> internal_subscript( my_early_size-1 );
-00657 }
-<a name="l00659"></a><a class="code" href="a00182.html#a35">00659</a> const_reference back()<span class="keyword"> const </span>{
-00660 __TBB_ASSERT( size()>0, NULL);
-00661 <span class="keywordflow">return</span> internal_subscript( my_early_size-1 );
-00662 }
-<a name="l00664"></a><a class="code" href="a00182.html#a36">00664</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
-00665
-<a name="l00667"></a><a class="code" href="a00182.html#a37">00667</a> <span class="keywordtype">void</span> assign(size_type n, const_reference t) { clear(); internal_assign( n, t ); }
-00668
-00670 <span class="keyword">template</span><<span class="keyword">class</span> I>
-<a name="l00671"></a><a class="code" href="a00182.html#a38">00671</a> <span class="keywordtype">void</span> assign(I first, I last) {
-00672 clear(); internal_assign( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
-00673 }
-00674
-<a name="l00676"></a><a class="code" href="a00182.html#a39">00676</a> <span class="keywordtype">void</span> swap(<a class="code" href="a00182.html">concurrent_vector</a> &vector) {
-00677 <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
-00678 concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
-00679 std::swap(this->my_allocator, vector.my_allocator);
-00680 }
-00681 }
-00682
-<a name="l00684"></a><a class="code" href="a00182.html#a40">00684</a> <span class="keywordtype">void</span> clear() {
-00685 segment_t *table = my_segment;
-00686 internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
-00687 my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
-00688 }
-00689
-<a name="l00691"></a><a class="code" href="a00182.html#a41">00691</a> ~<a class="code" href="a00182.html">concurrent_vector</a>() {
-00692 clear();
-00693 <span class="comment">// base class destructor call should be then</span>
-00694 }
-00695
-00696 <span class="keyword">const</span> <a class="code" href="a00183.html">internal::concurrent_vector_base_v3</a> &internal_vector_base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
-00697 <span class="keyword">private</span>:
-00699 <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
-00700 <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
-00701 }
-00703 <span class="keywordtype">void</span> internal_free_segments(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block);
-00704
-00706 T& internal_subscript( size_type index ) <span class="keyword">const</span>;
-00707
-00709 T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
-00710
-00712 <span class="keywordtype">void</span> internal_assign(size_type n, const_reference t);
-00713
-00715 <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
-00716
-00718 <span class="keyword">template</span><<span class="keyword">class</span> I>
-00719 <span class="keywordtype">void</span> internal_assign(I first, I last, is_integer_tag<true> *) {
-00720 internal_assign(static_cast<size_type>(first), static_cast<T>(last));
-00721 }
-00723 <span class="keyword">template</span><<span class="keyword">class</span> I>
-00724 <span class="keywordtype">void</span> internal_assign(I first, I last, is_integer_tag<false> *) {
-00725 internal_assign_iterators(first, last);
-00726 }
-00728 <span class="keyword">template</span><<span class="keyword">class</span> I>
-00729 <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
-00730
-00732 <span class="keyword">static</span> <span class="keywordtype">void</span> initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>*, size_type n );
-00733
-00735 <span class="keyword">static</span> <span class="keywordtype">void</span> initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
-00736
-00738 <span class="keyword">static</span> <span class="keywordtype">void</span> copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
-00739
-00741 <span class="keyword">static</span> <span class="keywordtype">void</span> assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
-00742
-00744 <span class="keyword">static</span> <span class="keywordtype">void</span> destroy_array( <span class="keywordtype">void</span>* begin, size_type n );
-00745
-00747 <span class="keyword">class </span>internal_loop_guide {
-00748 <span class="keyword">public</span>:
-00749 <span class="keyword">const</span> pointer array;
-00750 <span class="keyword">const</span> size_type n;
-00751 size_type i;
-00752 internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
-00753 : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
-00754 <span class="keywordtype">void</span> init() { <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
-00755 <span class="keywordtype">void</span> init(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) new( &array[i] ) T(*static_cast<const T*>(src)); }
-00756 <span class="keywordtype">void</span> copy(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) new( &array[i] ) T(static_cast<const T*>(src)[i]); }
-00757 <span class="keywordtype">void</span> assign(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) array[i] = static_cast<const T*>(src)[i]; }
-00758 <span class="keyword">template</span><<span class="keyword">class</span> I> <span class="keywordtype">void</span> iterate(I &src) { <span class="keywordflow">for</span>(; i < n; ++i, ++src) <span class="keyword">new</span>( &array[i] ) T( *src ); }
-00759 ~internal_loop_guide() {
-00760 <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
-00761 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
-00762 }
-00763 };
-00764 };
-00765
-00766 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-<a name="l00767"></a><a class="code" href="a00182.html#a22">00767</a> <span class="keywordtype">void</span> <a class="code" href="a00182.html">concurrent_vector<T, A>::compact</a>() {
-00768 internal_segments_table old;
-00769 <span class="keywordflow">try</span> {
-00770 <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, ©_array ) )
-00771 internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
-00772 } <span class="keywordflow">catch</span>(...) {
-00773 <span class="keywordflow">if</span>( old.first_block ) <span class="comment">// free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]</span>
-00774 internal_free_segments( old.table, 1, old.first_block );
-00775 <span class="keywordflow">throw</span>;
-00776 }
-00777 }
-00778
-00779 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00780 <span class="keywordtype">void</span> <a class="code" href="a00182.html">concurrent_vector<T, A>::internal_free_segments</a>(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block) {
-00781 <span class="comment">// Free the arrays</span>
-00782 <span class="keywordflow">while</span>( k > first_block ) {
-00783 --k;
-00784 T* array = static_cast<T*>(table[k]);
-00785 table[k] = NULL;
-00786 <span class="keywordflow">if</span>( array > __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
-00787 this->my_allocator.deallocate( array, segment_size(k) );
-00788 }
-00789 T* array = static_cast<T*>(table[0]);
-00790 <span class="keywordflow">if</span>( array > __TBB_BAD_ALLOC ) {
-00791 __TBB_ASSERT( first_block > 0, NULL );
-00792 <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
-00793 this->my_allocator.deallocate( array, segment_size(first_block) );
-00794 }
-00795 }
-00796
-00797 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00798 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
-00799 __TBB_ASSERT( index<<a class="code" href="a00182.html#a18">size</a>(), <span class="stringliteral">"index out of bounds"</span> );
-00800 size_type j = index;
-00801 segment_index_t k = segment_base_index_of( j );
-00802 <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
-00803 <span class="keywordflow">return</span> static_cast<T*>(my_segment[k].array)[j];
-00804 }
-00805
-00806 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00807 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
-00808 <span class="keywordflow">if</span>( index >= <a class="code" href="a00182.html#a18">size</a>() )
-00809 internal_throw_exception(0); <span class="comment">// throw std::out_of_range</span>
-00810 size_type j = index;
-00811 segment_index_t k = segment_base_index_of( j );
-00812 <span class="keywordflow">if</span>( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
-00813 internal_throw_exception(1); <span class="comment">// throw std::out_of_range</span>
-00814 <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
-00815 <span class="keywordflow">if</span>( array <= __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
-00816 internal_throw_exception(2); <span class="comment">// throw std::range_error</span>
-00817 <span class="keywordflow">return</span> static_cast<T*>(array)[j];
-00818 }
-00819
-00820 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00821 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign(size_type n, const_reference t)
-00822 {
-00823 <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
-00824 internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00182.html#a23">max_size</a>()); my_early_size = n;
-00825 __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
-00826 initialize_array_by(static_cast<T*>(my_segment[0].array), static_cast<const void*>(&t), n);
-00827 }
-00828
-00829 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A> <span class="keyword">template</span><<span class="keyword">class</span> I>
-00830 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
-00831 size_type n = std::distance(first, last);
-00832 <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
-00833 internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00182.html#a23">max_size</a>()); my_early_size = n;
-00834 __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
-00835 internal_loop_guide loop(n, my_segment[0].array); loop.iterate(first);
-00836 }
-00837
-00838 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00839 <span class="keywordtype">void</span> concurrent_vector<T, A>::initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *, size_type n ) {
-00840 internal_loop_guide loop(n, begin); loop.init();
-00841 }
-00842
-00843 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00844 <span class="keywordtype">void</span> concurrent_vector<T, A>::initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *src, size_type n ) {
-00845 internal_loop_guide loop(n, begin); loop.init(src);
-00846 }
-00847
-00848 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00849 <span class="keywordtype">void</span> concurrent_vector<T, A>::copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
-00850 internal_loop_guide loop(n, dst); loop.copy(src);
-00851 }
-00852
-00853 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00854 <span class="keywordtype">void</span> concurrent_vector<T, A>::assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
-00855 internal_loop_guide loop(n, dst); loop.assign(src);
-00856 }
-00857
-00858 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00859 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
-00860 T* array = static_cast<T*>(begin);
-00861 <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
-00862 array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
-00863 }
-00864
-00865 <span class="comment">// concurrent_vector's template functions</span>
-00866 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00867 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b) {
-00868 <span class="comment">//TODO[?]: deal with _Range_checked_iterator_tag of MSVC.</span>
-00869 <span class="comment">// Simply: return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
-00870 <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00871 <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
-00872 <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
-00873 <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
-00874 <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00875 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00876 }
-00877
-00878 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00879 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
-00880 { <span class="keywordflow">return</span> !(a == b); }
-00881
-00882 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00883 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(const concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
-00884 { <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
-00885
-00886 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00887 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
-00888 { <span class="keywordflow">return</span> b < a; }
-00889
-00890 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00891 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(const concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
-00892 { <span class="keywordflow">return</span> !(b < a); }
-00893
-00894 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
-00895 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
-00896 { <span class="keywordflow">return</span> !(a < b); }
-00897
-00898 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
-00899 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
-00900 { a.swap( b ); }
-00901
-00902 } <span class="comment">// namespace tbb</span>
-00903
-00904 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-00905 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
-00906 <span class="preprocessor"> #pragma warning (pop)</span>
-00907 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && _Wp64 */</span>
-00908
-00909 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00293.html b/doc/html/a00293.html
deleted file mode 100644
index dfd3f8f..0000000
--- a/doc/html/a00293.html
+++ /dev/null
@@ -1,409 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_do.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>parallel_do.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_parallel_do_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_do_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "task.h"</span>
-00025 <span class="preprocessor">#include "aligned_space.h"</span>
-00026 <span class="preprocessor">#include <iterator></span>
-00027
-00028 <span class="keyword">namespace </span>tbb {
-00029
-00031 <span class="keyword">namespace </span>internal {
-00032 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item> <span class="keyword">class </span>parallel_do_feeder_impl;
-00033 <span class="keyword">template</span><<span class="keyword">typename</span> Body> <span class="keyword">class </span>do_group_task;
-00034
-00036 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00037"></a><a class="code" href="a00226.html">00037</a> <span class="keyword">struct </span><a class="code" href="a00226.html">strip</a> { <span class="keyword">typedef</span> T type; };
-00038 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00039 <span class="keyword">struct </span><a class="code" href="a00226.html">strip</a><T&> { <span class="keyword">typedef</span> T type; };
-00040 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00041 <span class="keyword">struct </span>strip<const T&> { <span class="keyword">typedef</span> T type; };
-00042 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00043 <span class="keyword">struct </span>strip<volatile T&> { <span class="keyword">typedef</span> T type; };
-00044 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00045 <span class="keyword">struct </span>strip<const volatile T&> { <span class="keyword">typedef</span> T type; };
-00046 <span class="comment">// Most of the compilers remove cv-qualifiers from non-reference function argument types. </span>
-00047 <span class="comment">// But unfortunately there are those that don't.</span>
-00048 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00049 <span class="keyword">struct </span>strip<const T> { <span class="keyword">typedef</span> T type; };
-00050 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00051 <span class="keyword">struct </span>strip<volatile T> { <span class="keyword">typedef</span> T type; };
-00052 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00053 <span class="keyword">struct </span>strip<const volatile T> { <span class="keyword">typedef</span> T type; };
-00054 } <span class="comment">// namespace internal</span>
-00056 <span class="comment"></span>
-00058
-00059 <span class="keyword">template</span><<span class="keyword">typename</span> Item>
-<a name="l00060"></a><a class="code" href="a00201.html">00060</a> <span class="keyword">class </span><a class="code" href="a00201.html">parallel_do_feeder</a>: internal::no_copy
-00061 {
-00062 <a class="code" href="a00201.html">parallel_do_feeder</a>() {}
-00063 <span class="keyword">virtual</span> ~<a class="code" href="a00201.html">parallel_do_feeder</a> () {}
-00064 <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item ) = 0;
-00065 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00202.html">internal::parallel_do_feeder_impl</a>;
-00066 <span class="keyword">public</span>:
-<a name="l00068"></a><a class="code" href="a00201.html#a0">00068</a> <span class="keywordtype">void</span> add( <span class="keyword">const</span> Item& item ) {internal_add(item);}
-00069 };
-00070
-00072 <span class="keyword">namespace </span>internal {
-00074
-00076 <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00077"></a><a class="code" href="a00203.html">00077</a> <span class="keyword">class </span><a class="code" href="a00203.html">parallel_do_operator_selector</a>
-00078 {
-00079 <span class="keyword">typedef</span> <a class="code" href="a00201.html">parallel_do_feeder<Item></a> <a class="code" href="a00201.html">Feeder</a>;
-00080 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
-00081 <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body& obj, A1& arg1, A2&, <span class="keywordtype">void</span> (Body::*)(CvItem) <span class="keyword">const</span> ) {
-00082 obj(arg1);
-00083 }
-00084 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
-00085 <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2, <span class="keywordtype">void</span> (Body::*)(CvItem, <a class="code" href="a00201.html">parallel_do_feeder<Item></a>&) <span class="keyword">const</span> ) {
-00086 obj(arg1, arg2);
-00087 }
-00088
-00089 <span class="keyword">public</span>:
-00090 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2 >
-00091 <span class="keyword">static</span> <span class="keywordtype">void</span> call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2 )
-00092 {
-00093 internal_call( obj, arg1, arg2, &Body::operator() );
-00094 }
-00095 };
-00096
-00098
-00100 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00101"></a><a class="code" href="a00186.html">00101</a> <span class="keyword">class </span><a class="code" href="a00186.html">do_iteration_task</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a>
-00102 {
-00103 <span class="keyword">typedef</span> <a class="code" href="a00202.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00202.html">feeder_type</a>;
-00104
-00105 Item my_value;
-00106 <a class="code" href="a00202.html">feeder_type</a>& my_feeder;
-00107
-00108 <a class="code" href="a00186.html">do_iteration_task</a>( <span class="keyword">const</span> Item& value, <a class="code" href="a00202.html">feeder_type</a>& feeder ) :
-00109 my_value(value), my_feeder(feeder)
-00110 {}
-00111
-00112 <span class="comment">/*override*/</span>
-00113 <a class="code" href="a00228.html">task</a>* execute()
-00114 {
-00115 <a class="code" href="a00203.html">parallel_do_operator_selector<Body, Item>::call</a>(*my_feeder.my_body, my_value, my_feeder);
-00116 <span class="keywordflow">return</span> NULL;
-00117 }
-00118
-00119 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00202.html">parallel_do_feeder_impl</a>;
-00120 }; <span class="comment">// class do_iteration_task</span>
-00121
-00122 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-00123 <span class="keyword">class </span>do_iteration_task_iter: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a>
-00124 {
-00125 <span class="keyword">typedef</span> <a class="code" href="a00202.html">parallel_do_feeder_impl<Body, Item></a> feeder_type;
-00126
-00127 Iterator my_iter;
-00128 feeder_type& my_feeder;
-00129
-00130 do_iteration_task_iter( <span class="keyword">const</span> Iterator& iter, feeder_type& feeder ) :
-00131 my_iter(iter), my_feeder(feeder)
-00132 {}
-00133
-00134 <span class="comment">/*override*/</span>
-00135 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00228.html#a1">execute</a>()
-00136 {
-00137 parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
-00138 <span class="keywordflow">return</span> NULL;
-00139 }
-00140
-00141 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_forward;
-00142 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_input;
-00143 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
-00144 }; <span class="comment">// class do_iteration_task_iter</span>
-00145
-00147
-00149 <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00150"></a><a class="code" href="a00202.html">00150</a> <span class="keyword">class </span><a class="code" href="a00202.html">parallel_do_feeder_impl</a> : <span class="keyword">public</span> <a class="code" href="a00201.html">parallel_do_feeder</a><Item>
-00151 {
-00152 <span class="comment">/*override*/</span>
-00153 <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item )
-00154 {
-00155 <span class="keyword">typedef</span> <a class="code" href="a00186.html">do_iteration_task<Body, Item></a> iteration_type;
-00156
-00157 iteration_type& t = *<span class="keyword">new</span> (task::self().allocate_additional_child_of(*my_barrier)) iteration_type(item, *<span class="keyword">this</span>);
-00158
-00159 t.<a class="code" href="a00228.html#a14">spawn</a>( t );
-00160 }
-00161 <span class="keyword">public</span>:
-00162 <span class="keyword">const</span> Body* my_body;
-00163 <a class="code" href="a00188.html">empty_task</a>* my_barrier;
-00164 }; <span class="comment">// class parallel_do_feeder_impl</span>
-00165
-00166
-00168
-00171 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00172"></a><a class="code" href="a00185.html">00172</a> <span class="keyword">class </span><a class="code" href="a00185.html">do_group_task_forward</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a>
-00173 {
-00174 <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;
-00175
-00176 <span class="keyword">typedef</span> <a class="code" href="a00202.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00202.html">feeder_type</a>;
-00177
-00178 <a class="code" href="a00202.html">feeder_type</a>& my_feeder;
-00179 Iterator my_first;
-00180 size_t my_size;
-00181
-00182 <a class="code" href="a00185.html">do_group_task_forward</a>( Iterator first, size_t size, <a class="code" href="a00202.html">feeder_type</a>& feeder )
-00183 : my_feeder(feeder), my_first(first), my_size(size)
-00184 {}
-00185
-00186 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute()
-00187 {
-00188 <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
-00189 __TBB_ASSERT( my_size>0, NULL );
-00190 <a class="code" href="a00229.html">task_list</a> list;
-00191 <a class="code" href="a00228.html">task</a>* t;
-00192 size_t k=0;
-00193 <span class="keywordflow">for</span>(;;) {
-00194 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_first, my_feeder );
-00195 ++my_first;
-00196 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
-00197 list.<a class="code" href="a00229.html#a3">push_back</a>(*t);
-00198 }
-00199 set_ref_count(<span class="keywordtype">int</span>(k+1));
-00200 spawn(list);
-00201 spawn_and_wait_for_all(*t);
-00202 <span class="keywordflow">return</span> NULL;
-00203 }
-00204
-00205 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> _Item> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00187.html">do_task_iter</a>;
-00206 }; <span class="comment">// class do_group_task_forward</span>
-00207
-00208 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-00209 <span class="keyword">class </span>do_group_task_input: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a>
-00210 {
-00211 <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;
-00212
-00213 <span class="keyword">typedef</span> <a class="code" href="a00202.html">parallel_do_feeder_impl<Body, Item></a> feeder_type;
-00214
-00215 feeder_type& my_feeder;
-00216 size_t my_size;
-00217 <a class="code" href="a00164.html">aligned_space<Item, max_arg_size></a> my_arg;
-00218
-00219 do_group_task_input( feeder_type& feeder )
-00220 : my_feeder(feeder), my_size(0)
-00221 {}
-00222
-00223 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* <a class="code" href="a00228.html#a1">execute</a>()
-00224 {
-00225 <span class="keyword">typedef</span> do_iteration_task_iter<Item*, Body, Item> iteration_type;
-00226 __TBB_ASSERT( my_size>0, NULL );
-00227 <a class="code" href="a00229.html">task_list</a> list;
-00228 <a class="code" href="a00228.html">task</a>* t;
-00229 size_t k=0;
-00230 <span class="keywordflow">for</span>(;;) {
-00231 t = <span class="keyword">new</span>( <a class="code" href="a00228.html#a3">allocate_child</a>() ) iteration_type( my_arg.begin() + k, my_feeder );
-00232 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
-00233 list.<a class="code" href="a00229.html#a3">push_back</a>(*t);
-00234 }
-00235 <a class="code" href="a00228.html#a13">set_ref_count</a>(<span class="keywordtype">int</span>(k+1));
-00236 <a class="code" href="a00228.html#a14">spawn</a>(list);
-00237 <a class="code" href="a00228.html#a16">spawn_and_wait_for_all</a>(*t);
-00238 <span class="keywordflow">return</span> NULL;
-00239 }
-00240
-00241 ~do_group_task_input(){
-00242 <span class="keywordflow">for</span>( size_t k=0; k<my_size; ++k)
-00243 (my_arg.begin() + k)->~Item();
-00244 }
-00245
-00246 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
-00247 }; <span class="comment">// class do_group_task_input</span>
-00248
-00250
-00252 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00253"></a><a class="code" href="a00187.html">00253</a> <span class="keyword">class </span><a class="code" href="a00187.html">do_task_iter</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a>
-00254 {
-00255 <span class="comment">//typedef typename std::iterator_traits<Iterator>::value_type Item;</span>
-00256 <span class="keyword">typedef</span> <a class="code" href="a00202.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00202.html">feeder_type</a>;
-00257
-00258 <span class="keyword">public</span>:
-00259 <a class="code" href="a00187.html">do_task_iter</a>( Iterator first, Iterator last , <a class="code" href="a00202.html">feeder_type</a>& feeder ) :
-00260 my_first(first), my_last(last), my_feeder(feeder)
-00261 {}
-00262
-00263 <span class="keyword">private</span>:
-00264 Iterator my_first;
-00265 Iterator my_last;
-00266 <a class="code" href="a00202.html">feeder_type</a>& my_feeder;
-00267
-00268 <span class="comment">/* Do not merge run(xxx) and run_xxx() methods. They are separated in order</span>
-00269 <span class="comment"> to make sure that compilers will eliminate unused argument of type xxx</span>
-00270 <span class="comment"> (that is will not put it on stack). The sole purpose of this argument </span>
-00271 <span class="comment"> is overload resolution.</span>
-00272 <span class="comment"> </span>
-00273 <span class="comment"> An alternative could be using template functions, but explicit specialization </span>
-00274 <span class="comment"> of member function templates is not supported for non specialized class </span>
-00275 <span class="comment"> templates. Besides template functions would always fall back to the least </span>
-00276 <span class="comment"> efficient variant (the one for input iterators) in case of iterators having </span>
-00277 <span class="comment"> custom tags derived from basic ones. */</span>
-00278 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute()
-00279 {
-00280 <span class="keyword">typedef</span> <span class="keyword">typename</span> std::iterator_traits<Iterator>::iterator_category iterator_tag;
-00281 <span class="keywordflow">return</span> run( (iterator_tag*)NULL );
-00282 }
-00283
-00286 <span class="keyword">inline</span> <a class="code" href="a00228.html">task</a>* run( <span class="keywordtype">void</span>* ) { <span class="keywordflow">return</span> run_for_input_iterator(); }
-00287
-00288 <a class="code" href="a00228.html">task</a>* run_for_input_iterator() {
-00289 <span class="keyword">typedef</span> do_group_task_input<Body, Item> block_type;
-00290
-00291 block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
-00292 size_t k=0;
-00293 <span class="keywordflow">while</span>( !(my_first == my_last) ) {
-00294 <span class="keyword">new</span> (t.my_arg.begin() + k) Item(*my_first);
-00295 ++my_first;
-00296 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
-00297 <span class="keywordflow">if</span> ( !(my_first == my_last) )
-00298 recycle_to_reexecute();
-00299 <span class="keywordflow">break</span>;
-00300 }
-00301 }
-00302 <span class="keywordflow">if</span>( k==0 ) {
-00303 destroy(t);
-00304 <span class="keywordflow">return</span> NULL;
-00305 } <span class="keywordflow">else</span> {
-00306 t.my_size = k;
-00307 <span class="keywordflow">return</span> &t;
-00308 }
-00309 }
-00310
-00311 <span class="keyword">inline</span> <a class="code" href="a00228.html">task</a>* run( std::forward_iterator_tag* ) { <span class="keywordflow">return</span> run_for_forward_iterator(); }
-00312
-00313 <a class="code" href="a00228.html">task</a>* run_for_forward_iterator() {
-00314 <span class="keyword">typedef</span> <a class="code" href="a00185.html">do_group_task_forward<Iterator, Body, Item></a> block_type;
-00315
-00316 Iterator first = my_first;
-00317 size_t k=0;
-00318 <span class="keywordflow">while</span>( !(my_first==my_last) ) {
-00319 ++my_first;
-00320 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
-00321 <span class="keywordflow">if</span> ( !(my_first==my_last) )
-00322 recycle_to_reexecute();
-00323 <span class="keywordflow">break</span>;
-00324 }
-00325 }
-00326 <span class="keywordflow">return</span> k==0 ? NULL : <span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);
-00327 }
-00328
-00329 <span class="keyword">inline</span> <a class="code" href="a00228.html">task</a>* run( std::random_access_iterator_tag* ) { <span class="keywordflow">return</span> run_for_random_access_iterator(); }
-00330
-00331 <a class="code" href="a00228.html">task</a>* run_for_random_access_iterator() {
-00332 <span class="keyword">typedef</span> <a class="code" href="a00185.html">do_group_task_forward<Iterator, Body, Item></a> block_type;
-00333 <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
-00334
-00335 size_t k = static_cast<size_t>(my_last-my_first);
-00336 <span class="keywordflow">if</span>( k > block_type::max_arg_size ) {
-00337 Iterator middle = my_first + k/2;
-00338
-00339 <a class="code" href="a00188.html">empty_task</a>& c = *<span class="keyword">new</span>( allocate_continuation() ) <a class="code" href="a00188.html">empty_task</a>;
-00340 <a class="code" href="a00187.html">do_task_iter</a>& b = *<span class="keyword">new</span>( c.<a class="code" href="a00228.html#a3">allocate_child</a>() ) <a class="code" href="a00187.html">do_task_iter</a>(middle, my_last, my_feeder);
-00341 recycle_as_child_of(c);
-00342
-00343 my_last = middle;
-00344 c.<a class="code" href="a00228.html#a13">set_ref_count</a>(2);
-00345 c.<a class="code" href="a00228.html#a14">spawn</a>(b);
-00346 <span class="keywordflow">return</span> <span class="keyword">this</span>;
-00347 }<span class="keywordflow">else</span> <span class="keywordflow">if</span>( k != 0 ) {
-00348 <a class="code" href="a00229.html">task_list</a> list;
-00349 <a class="code" href="a00228.html">task</a>* t;
-00350 size_t k1=0;
-00351 <span class="keywordflow">for</span>(;;) {
-00352 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_first, my_feeder);
-00353 ++my_first;
-00354 <span class="keywordflow">if</span>( ++k1==k ) <span class="keywordflow">break</span>;
-00355 list.<a class="code" href="a00229.html#a3">push_back</a>(*t);
-00356 }
-00357 set_ref_count(<span class="keywordtype">int</span>(k+1));
-00358 spawn(list);
-00359 spawn_and_wait_for_all(*t);
-00360 }
-00361 <span class="keywordflow">return</span> NULL;
-00362 }
-00363 }; <span class="comment">// class do_task_iter</span>
-00364
-00366
-00368 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00369"></a><a class="code" href="a00281.html#ga0">00369</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga0">run_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body )
-00370 {
-00371 <span class="keyword">typedef</span> do_task_iter<Iterator, Body, Item> root_iteration_task;
-00372 parallel_do_feeder_impl<Body, Item> feeder;
-00373 feeder.my_body = &body;
-00374 feeder.my_barrier = <span class="keyword">new</span>( task::allocate_root() ) empty_task();
-00375 __TBB_ASSERT(feeder.my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
-00376
-00377 root_iteration_task &t = *<span class="keyword">new</span>( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
-00378
-00379 feeder.my_barrier->set_ref_count(2);
-00380 feeder.my_barrier->spawn_and_wait_for_all(t);
-00381
-00382 feeder.my_barrier->destroy(*feeder.my_barrier);
-00383 }
-00384
-00386
-00388 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
-<a name="l00389"></a><a class="code" href="a00281.html#ga1">00389</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga2">select_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item) <span class="keyword">const</span> )
-00390 {
-00391 run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body );
-00392 }
-00393
-00395
-00397 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item, <span class="keyword">typename</span> _Item>
-<a name="l00398"></a><a class="code" href="a00281.html#ga2">00398</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga2">select_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item, parallel_do_feeder<_Item>&) <span class="keyword">const</span> )
-00399 {
-00400 run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body );
-00401 }
-00402
-00403 } <span class="comment">// namespace internal</span>
-00405 <span class="comment"></span>
-00406
-00429
-00430
-00431 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body>
-<a name="l00432"></a><a class="code" href="a00281.html#ga3">00432</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga3">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body )
-00433 {
-00434 <span class="keywordflow">if</span> ( first == last )
-00435 <span class="keywordflow">return</span>;
-00436 <a class="code" href="a00281.html#ga2">internal::select_parallel_do</a>( first, last, body, &Body::operator() );
-00437 }
-00439
-00440 } <span class="comment">// namespace </span>
-00441
-00442 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_do_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00295.html b/doc/html/a00295.html
deleted file mode 100644
index 912e4ca..0000000
--- a/doc/html/a00295.html
+++ /dev/null
@@ -1,318 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_reduce.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "task.h"</span>
-00025 <span class="preprocessor">#include "aligned_space.h"</span>
-00026 <span class="preprocessor">#include "partitioner.h"</span>
-00027 <span class="preprocessor">#include <new></span>
-00028
-00029 <span class="keyword">namespace </span>tbb {
-00030
-00032 <span class="keyword">namespace </span>internal {
-00033
-00035 <span class="keywordtype">void</span> <a class="code" href="a00279.html#a35">itt_store_pointer_with_release_v3</a>( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
-00036
-00038 <span class="keywordtype">void</span>* <a class="code" href="a00279.html#a36">itt_load_pointer_with_acquire_v3</a>( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
-00039
-00040 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_reduce_store_body( T*& dst, T* src ) {
-00041 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00042 <span class="preprocessor"></span> <a class="code" href="a00279.html#a35">itt_store_pointer_with_release_v3</a>(&dst,src);
-00043 <span class="preprocessor">#else</span>
-00044 <span class="preprocessor"></span> __TBB_store_with_release(dst,src);
-00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00046 }
-00047
-00048 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T* parallel_reduce_load_body( T*& src ) {
-00049 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00050 <span class="preprocessor"></span> <span class="keywordflow">return</span> static_cast<T*>(<a class="code" href="a00279.html#a36">itt_load_pointer_with_acquire_v3</a>(&src));
-00051 <span class="preprocessor">#else</span>
-00052 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
-00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00054 }
-00055
-00057
-00058 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00059"></a><a class="code" href="a00192.html">00059</a> <span class="keyword">class </span><a class="code" href="a00192.html">finish_reduce</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00060 Body* <span class="keyword">const</span> my_body;
-00061 <span class="keywordtype">bool</span> has_right_zombie;
-00062 <a class="code" href="a00164.html">aligned_space<Body,1></a> zombie_space;
-00063 <a class="code" href="a00192.html">finish_reduce</a>( Body* body ) :
-00064 my_body(body),
-00065 has_right_zombie(<span class="keyword">false</span>)
-00066 {
-00067 }
-00068 <a class="code" href="a00228.html">task</a>* execute() {
-00069 <span class="keywordflow">if</span>( has_right_zombie ) {
-00070 <span class="comment">// Right child was stolen.</span>
-00071 Body* s = zombie_space.begin();
-00072 my_body->join( *s );
-00073 s->~Body();
-00074 }
-00075 <span class="keywordflow">return</span> NULL;
-00076 }
-00077 <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Partitioner>
-00078 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00223.html">start_reduce</a>;
-00079 };
-00080
-00082
-00083 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00084"></a><a class="code" href="a00223.html">00084</a> <span class="keyword">class </span><a class="code" href="a00223.html">start_reduce</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00085 <span class="keyword">typedef</span> <a class="code" href="a00192.html">finish_reduce<Body></a> <a class="code" href="a00192.html">finish_type</a>;
-00086 Body* my_body;
-00087 Range my_range;
-00088 <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-00089 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute();
-00090 <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
-00091 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00192.html">finish_reduce</a>;
-00092
-00094 <a class="code" href="a00223.html">start_reduce</a>( <span class="keyword">const</span> Range& range, Body* body, <span class="keyword">const</span> Partitioner &partitioner ) :
-00095 my_body(body),
-00096 my_range(range),
-00097 my_partition(partitioner)
-00098 {
-00099 }
-00101
-00102 <a class="code" href="a00223.html">start_reduce</a>( <a class="code" href="a00223.html">start_reduce</a>& parent, <a class="code" href="a00221.html">split</a> ) :
-00103 my_body(parent.<a class="code" href="a00223.html#r0">my_body</a>),
-00104 my_range(parent.<a class="code" href="a00223.html#r1">my_range</a>,<a class="code" href="a00221.html">split</a>()),
-00105 my_partition(parent.<a class="code" href="a00223.html#r2">my_partition</a>,<a class="code" href="a00221.html">split</a>())
-00106 {
-00107 }
-00109
-00110 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00279.html#a12">affinity_id</a> <span class="keywordtype">id</span> ) {
-00111 <a class="code" href="a00192.html">finish_type</a>* p = static_cast<finish_type*>(parent() );
-00112 Body* body = <span class="keyword">new</span>( p-><a class="code" href="a00192.html#r2">zombie_space</a>.<a class="code" href="a00164.html#a0">begin</a>() ) Body(*my_body,<a class="code" href="a00221.html">split</a>());
-00113 p-><a class="code" href="a00192.html#r1">has_right_zombie</a> = <span class="keyword">true</span>;
-00114 my_body = body;
-00115 }
-00116 <span class="keyword">public</span>:
-00117 <span class="preprocessor">#if !__TBB_EXCEPTIONS</span>
-00118 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner ) {
-00119 <span class="keywordflow">if</span>( !range.empty() )
-00120 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00223.html">start_reduce</a>(range,&body,partitioner) );
-00121 }
-00122 <span class="preprocessor">#else </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-00123 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner ) {
-00124 <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-00125 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-00126 <span class="keywordflow">if</span>( !range.empty() ) {
-00127 task_group_context context;
-00128 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00223.html">start_reduce</a>(range,&body,partitioner) );
-00129 }
-00130 }
-00131 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner, task_group_context& context ) {
-00132 <span class="keywordflow">if</span>( !range.empty() )
-00133 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00223.html">start_reduce</a>(range,&body,partitioner) );
-00134 }
-00135 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-00136 };
-00137
-00138 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-00139 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00223.html">start_reduce<Range,Body,Partitioner>::execute</a>() {
-00140 <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-00141 (*my_body)( my_range );
-00142 <span class="keywordflow">return</span> NULL;
-00143 } <span class="keywordflow">else</span> {
-00144 finish_type& c = *<span class="keyword">new</span>( <a class="code" href="a00228.html#a2">allocate_continuation</a>()) finish_type(my_body);
-00145 <a class="code" href="a00228.html#a8">recycle_as_child_of</a>(c);
-00146 c.<a class="code" href="a00228.html#a13">set_ref_count</a>(2);
-00147 start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,<a class="code" href="a00221.html">split</a>());
-00148 <a class="code" href="a00228.html#a14">spawn</a>(b);
-00149 <span class="keywordflow">return</span> <span class="keyword">this</span>;
-00150 }
-00151 }
-00152
-00154
-<a name="l00155"></a><a class="code" href="a00279.html#a4">00155</a> <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
-00156
-00158
-00159 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00160"></a><a class="code" href="a00193.html">00160</a> <span class="keyword">class </span><a class="code" href="a00193.html">finish_reduce_with_affinity</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00162 Body* my_body;
-00163 <span class="keywordtype">bool</span> has_right_zombie;
-00164 <span class="keyword">const</span> <a class="code" href="a00279.html#a4">reduction_context</a> my_context;
-00165 <a class="code" href="a00164.html">aligned_space<Body,1></a> zombie_space;
-00166 <a class="code" href="a00193.html">finish_reduce_with_affinity</a>( <span class="keywordtype">char</span> context ) :
-00167 my_body(NULL),
-00168 has_right_zombie(<span class="keyword">false</span>),
-00169 my_context(context)
-00170 {
-00171 }
-00172 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00228.html#a1">execute</a>() {
-00173 <span class="keywordflow">if</span>( has_right_zombie ) {
-00174 <span class="comment">// Right child was stolen.</span>
-00175 Body* s = zombie_space.<a class="code" href="a00164.html#a0">begin</a>();
-00176 my_body->join( *s );
-00177 s->~Body();
-00178 }
-00179 <span class="keywordflow">if</span>( my_context==1 )
-00180 parallel_reduce_store_body( static_cast<finish_reduce_with_affinity*>(<a class="code" href="a00228.html#a19">parent</a>())->my_body, my_body );
-00181 <span class="keywordflow">return</span> NULL;
-00182 }
-00183 <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_>
-00184 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00224.html">start_reduce_with_affinity</a>;
-00185 };
-00186
-00188
-00189 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00190"></a><a class="code" href="a00224.html">00190</a> <span class="keyword">class </span><a class="code" href="a00224.html">start_reduce_with_affinity</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00191 <span class="keyword">typedef</span> <a class="code" href="a00193.html">finish_reduce_with_affinity<Body></a> <a class="code" href="a00193.html">finish_type</a>;
-00192 Body* my_body;
-00193 Range my_range;
-00194 <span class="keyword">typename</span> affinity_partitioner::partition_type my_partition;
-00195 <a class="code" href="a00279.html#a4">reduction_context</a> my_context;
-00196 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* <a class="code" href="a00228.html#a1">execute</a>();
-00197 <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
-00198 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00193.html">finish_reduce_with_affinity</a>;
-00199
-00201 <a class="code" href="a00224.html">start_reduce_with_affinity</a>( <span class="keyword">const</span> Range& range, Body* body, <a class="code" href="a00162.html">affinity_partitioner</a>& partitioner ) :
-00202 my_body(body),
-00203 my_range(range),
-00204 my_partition(partitioner),
-00205 my_context(0)
-00206 {
-00207 }
-00209
-00210 <a class="code" href="a00224.html">start_reduce_with_affinity</a>( <a class="code" href="a00224.html">start_reduce_with_affinity</a>& parent, <a class="code" href="a00221.html">split</a> ) :
-00211 my_body(parent.<a class="code" href="a00224.html#r0">my_body</a>),
-00212 my_range(parent.<a class="code" href="a00224.html#r1">my_range</a>,<a class="code" href="a00221.html">split</a>()),
-00213 my_partition(parent.<a class="code" href="a00224.html#r2">my_partition</a>,<a class="code" href="a00221.html">split</a>()),
-00214 my_context(2)
-00215 {
-00216 my_partition.<a class="code" href="a00228.html#a24">set_affinity</a>(*<span class="keyword">this</span>);
-00217 parent.<a class="code" href="a00224.html#r3">my_context</a> = 1;
-00218 }
-00220 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> <a class="code" href="a00228.html#a26">note_affinity</a>( affinity_id <span class="keywordtype">id</span> ) {
-00221 my_partition.<a class="code" href="a00224.html#d3">note_affinity</a>( <span class="keywordtype">id</span> );
-00222 }
-00223
-00224 <span class="keyword">public</span>:
-00225 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00162.html">affinity_partitioner</a>& partitioner ) {
-00226 <span class="keywordflow">if</span>( !range.empty() ) {
-00227 <span class="preprocessor">#if !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP</span>
-00228 <span class="preprocessor"></span> task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00224.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
-00229 <span class="preprocessor">#else</span>
-00230 <span class="preprocessor"></span> <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
-00231 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-00232 task_group_context context;
-00233 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00224.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
-00234 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
-00235 }
-00236 }
-00237 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00238 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00162.html">affinity_partitioner</a>& partitioner, task_group_context& context ) {
-00239 <span class="keywordflow">if</span>( !range.empty() )
-00240 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00224.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
-00241 }
-00242 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-00243 };
-00244
-00245 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00246 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00224.html">start_reduce_with_affinity<Range,Body>::execute</a>() {
-00247 <span class="keywordflow">if</span>( my_context==2 ) {
-00248 finish_type* p = static_cast<finish_type*>(<a class="code" href="a00228.html#a19">parent</a>() );
-00249 <span class="keywordflow">if</span>( !parallel_reduce_load_body(p->my_body) ) {
-00250 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,<a class="code" href="a00221.html">split</a>());
-00251 p->has_right_zombie = <span class="keyword">true</span>;
-00252 }
-00253 }
-00254 <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
-00255 (*my_body)( my_range );
-00256 <span class="keywordflow">if</span>( my_context==1 )
-00257 parallel_reduce_store_body(static_cast<finish_type*>(<a class="code" href="a00228.html#a19">parent</a>())->my_body, my_body );
-00258 <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
-00259 } <span class="keywordflow">else</span> {
-00260 finish_type& c = *<span class="keyword">new</span>( <a class="code" href="a00228.html#a2">allocate_continuation</a>()) finish_type(my_context);
-00261 <a class="code" href="a00228.html#a8">recycle_as_child_of</a>(c);
-00262 c.<a class="code" href="a00228.html#a13">set_ref_count</a>(2);
-00263 <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-00264 start_reduce_with_affinity& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce_with_affinity(*<span class="keyword">this</span>,split());
-00265 my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
-00266 <span class="keywordflow">return</span> <span class="keyword">this</span>;
-00267 }
-00268 }
-00269 } <span class="comment">// namespace internal</span>
-00271 <span class="comment"></span>
-00272 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
-00273
-00288
-00290
-00291 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00292"></a><a class="code" href="a00281.html#ga7">00292</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner = simple_partitioner() ) {
-00293 internal::start_reduce<Range,Body,simple_partitioner>::run( range, body, partitioner );
-00294 }
-00295
-00297
-00298 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00299"></a><a class="code" href="a00281.html#ga8">00299</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
-00300 internal::start_reduce<Range,Body,auto_partitioner>::run( range, body, partitioner );
-00301 }
-00302
-00304
-00305 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00306"></a><a class="code" href="a00281.html#ga9">00306</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, affinity_partitioner& partitioner ) {
-00307 internal::start_reduce_with_affinity<Range,Body>::run( range, body, partitioner );
-00308 }
-00309
-00310 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00311 <span class="preprocessor"></span>
-00312
-00313 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00314 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner, task_group_context& context ) {
-00315 internal::start_reduce<Range,Body,simple_partitioner>::run( range, body, partitioner, context );
-00316 }
-00317
-00319
-00320 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00321 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner, task_group_context& context ) {
-00322 internal::start_reduce<Range,Body,auto_partitioner>::run( range, body, partitioner, context );
-00323 }
-00324
-00326
-00327 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00328 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga7">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
-00329 internal::start_reduce_with_affinity<Range,Body>::run( range, body, partitioner, context );
-00330 }
-00331 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-00332
-00333
-00334 } <span class="comment">// namespace tbb</span>
-00335
-00336 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
-00337
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00297.html b/doc/html/a00297.html
deleted file mode 100644
index abf32ce..0000000
--- a/doc/html/a00297.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>parallel_sort.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "parallel_for.h"</span>
-00025 <span class="preprocessor">#include <algorithm></span>
-00026 <span class="preprocessor">#include <iterator></span>
-00027 <span class="preprocessor">#include <functional></span>
-00028
-00029 <span class="keyword">namespace </span>tbb {
-00030
-00032 <span class="keyword">namespace </span>internal {
-00033
-00035
-00037 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00038"></a><a class="code" href="a00213.html">00038</a> <span class="keyword">struct </span><a class="code" href="a00213.html">quick_sort_range</a> {
-00039 <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
-00040 <span class="keyword">const</span> Compare ∁
-00041 RandomAccessIterator begin;
-00042 size_t size;
-00043
-00044 <a class="code" href="a00213.html">quick_sort_range</a>( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &comp_ ) :
-00045 comp(comp_), begin(begin_), size(size_) {}
-00046
-00047 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
-00048 <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size>=grainsize;}
-00049
-00050 <a class="code" href="a00213.html">quick_sort_range</a>( <a class="code" href="a00213.html">quick_sort_range</a>& range, <a class="code" href="a00221.html">split</a> ) : comp(range.<a class="code" href="a00213.html#o0">comp</a>) {
-00051 RandomAccessIterator array = range.<a class="code" href="a00213.html#o1">begin</a>;
-00052 RandomAccessIterator key0 = range.<a class="code" href="a00213.html#o1">begin</a>;
-00053 size_t m = range.<a class="code" href="a00213.html#o2">size</a>/2u;
-00054 std::swap ( array[0], array[m] );
-00055
-00056 size_t i=0;
-00057 size_t j=range.<a class="code" href="a00213.html#o2">size</a>;
-00058 <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
-00059 <span class="keywordflow">for</span>(;;) {
-00060 __TBB_ASSERT( i<j, NULL );
-00061 <span class="comment">// Loop must terminate since array[l]==*key0.</span>
-00062 <span class="keywordflow">do</span> {
-00063 --j;
-00064 __TBB_ASSERT( i<=j, <span class="stringliteral">"bad ordering relation?"</span> );
-00065 } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
-00066 <span class="keywordflow">do</span> {
-00067 __TBB_ASSERT( i<=j, NULL );
-00068 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-00069 ++i;
-00070 } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
-00071 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
-00072 std::swap( array[i], array[j] );
-00073 }
-00074 partition:
-00075 <span class="comment">// Put the partition key were it belongs</span>
-00076 std::swap( array[j], *key0 );
-00077 <span class="comment">// array[l..j) is less or equal to key.</span>
-00078 <span class="comment">// array(j..r) is greater or equal to key.</span>
-00079 <span class="comment">// array[j] is equal to key</span>
-00080 i=j+1;
-00081 begin = array+i;
-00082 size = range.<a class="code" href="a00213.html#o2">size</a>-i;
-00083 range.<a class="code" href="a00213.html#o2">size</a> = j;
-00084 }
-00085 };
-00086
-00088
-00089 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00090"></a><a class="code" href="a00212.html">00090</a> <span class="keyword">struct </span><a class="code" href="a00212.html">quick_sort_body</a> {
-00091 <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> <a class="code" href="a00213.html">quick_sort_range<RandomAccessIterator,Compare></a>& range )<span class="keyword"> const </span>{
-00092 <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
-00093 std::sort( range.<a class="code" href="a00213.html#o1">begin</a>, range.<a class="code" href="a00213.html#o1">begin</a> + range.<a class="code" href="a00213.html#o2">size</a>, range.<a class="code" href="a00213.html#o0">comp</a> );
-00094 }
-00095 };
-00096
-00098
-00099 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00100"></a><a class="code" href="a00281.html#ga12">00100</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga12">parallel_quick_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
-00101 <a class="code" href="a00281.html#ga6">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), quick_sort_body<RandomAccessIterator,Compare>() );
-00102 }
-00103
-00104 } <span class="comment">// namespace internal</span>
-00106 <span class="comment"></span>
-00117
-00119
-00122 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
-<a name="l00123"></a><a class="code" href="a00281.html#ga13">00123</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga15">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) {
-00124 <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500;
-00125 <span class="keywordflow">if</span>( end > begin ) {
-00126 <span class="keywordflow">if</span> (end - begin < min_parallel_size) {
-00127 std::sort(begin, end, comp);
-00128 } <span class="keywordflow">else</span> {
-00129 <a class="code" href="a00281.html#ga12">internal::parallel_quick_sort</a>(begin, end, comp);
-00130 }
-00131 }
-00132 }
-00133
-00135
-00136 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
-<a name="l00137"></a><a class="code" href="a00281.html#ga14">00137</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga15">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) {
-00138 <a class="code" href="a00281.html#ga15">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
-00139 }
-00140
-00142
-00143 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00144"></a><a class="code" href="a00281.html#ga15">00144</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga15">parallel_sort</a>( T * begin, T * end ) {
-00145 <a class="code" href="a00281.html#ga15">parallel_sort</a>( begin, end, std::less< T >() );
-00146 }
-00148
-00149
-00150 } <span class="comment">// namespace tbb</span>
-00151
-00152 <span class="preprocessor">#endif</span>
-00153 <span class="preprocessor"></span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00300.html b/doc/html/a00300.html
deleted file mode 100644
index c811e9b..0000000
--- a/doc/html/a00300.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>pipeline.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>pipeline.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_pipeline_H </span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_H </span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "atomic.h"</span>
-00025 <span class="preprocessor">#include "task.h"</span>
-00026 <span class="preprocessor">#include <cstddef></span>
-00027
-00028 <span class="keyword">namespace </span>tbb {
-00029
-00030 <span class="keyword">class </span>pipeline;
-00031 <span class="keyword">class </span>filter;
-00032
-00034 <span class="keyword">namespace </span>internal {
-00035 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> IS_SERIAL = 0x1;
-00036 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> SERIAL_MODE_MASK = 0x1; <span class="comment">// the lowest bit 0 is for parallel vs. serial </span>
-00037
-00038 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
-00039 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
-00040 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> VERSION_MASK = 0x7<<1; <span class="comment">// bits 1-3 are for version</span>
-00041 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> CURRENT_VERSION = __TBB_PIPELINE_VERSION(3);
-00042
-00043 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
-00044 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
-00045 <span class="keyword">class </span>stage_task;
-00046 <span class="keyword">class </span>ordered_buffer;
-00047
-00048 } <span class="comment">// namespace internal</span>
-00050 <span class="comment"></span>
-00052
-<a name="l00053"></a><a class="code" href="a00189.html">00053</a> <span class="keyword">class </span><a class="code" href="a00189.html">filter</a> {
-00054 <span class="keyword">private</span>:
-00056 <span class="keyword">static</span> <a class="code" href="a00189.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(internal::intptr(-1));}
-00057 <span class="keyword">protected</span>:
-<a name="l00059"></a><a class="code" href="a00189.html#x2">00059</a> <span class="keyword">enum</span> mode {
-00060 parallel = internal::CURRENT_VERSION,
-00061 serial = internal::CURRENT_VERSION | internal::IS_SERIAL
-00062 };
-00063
-00064 <a class="code" href="a00189.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) :
-00065 next_filter_in_pipeline(not_in_pipeline()),
-00066 input_buffer(NULL),
-00067 my_filter_mode(static_cast<unsigned char>(is_serial_ ? serial : parallel)),
-00068 prev_filter_in_pipeline(not_in_pipeline()),
-00069 my_pipeline(NULL)
-00070 {}
-00071
-00072 filter( mode filter_mode ) :
-00073 next_filter_in_pipeline(not_in_pipeline()),
-00074 input_buffer(NULL),
-00075 my_filter_mode(static_cast<unsigned char>(filter_mode)),
-00076 prev_filter_in_pipeline(not_in_pipeline()),
-00077 my_pipeline(NULL)
-00078 {}
-00079
-00080
-00081 <span class="keyword">public</span>:
-<a name="l00083"></a><a class="code" href="a00189.html#a0">00083</a> <span class="keywordtype">bool</span> is_serial()<span class="keyword"> const </span>{
-00084 <span class="keywordflow">return</span> (my_filter_mode & internal::SERIAL_MODE_MASK) == internal::IS_SERIAL;
-00085 }
-00086
-00088
-00089 <span class="keyword">virtual</span> <span class="keywordtype">void</span>* operator()( <span class="keywordtype">void</span>* item ) = 0;
-00090
-00092
-00093 <span class="keyword">virtual</span> ~<a class="code" href="a00189.html">filter</a>();
-00094
-00095 <span class="keyword">private</span>:
-00097 <a class="code" href="a00189.html">filter</a>* next_filter_in_pipeline;
-00098
-00100 internal::ordered_buffer* input_buffer;
-00101
-00102 <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-00103 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00206.html">pipeline</a>;
-00104
-00106 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
-00107
-00109 <a class="code" href="a00189.html">filter</a>* prev_filter_in_pipeline;
-00110
-00112 <a class="code" href="a00206.html">pipeline</a>* my_pipeline;
-00113 };
-00114
-00116
-<a name="l00117"></a><a class="code" href="a00206.html">00117</a> <span class="keyword">class </span><a class="code" href="a00206.html">pipeline</a> {
-00118 <span class="keyword">public</span>:
-00120 <a class="code" href="a00206.html">pipeline</a>();
-00121
-00123 <span class="keyword">virtual</span> ~<a class="code" href="a00206.html">pipeline</a>();
-00124
-00126 <span class="keywordtype">void</span> add_filter( <a class="code" href="a00189.html">filter</a>& filter_ );
-00127
-00129 <span class="keywordtype">void</span> run( size_t max_number_of_live_tokens );
-00130
-00132 <span class="keywordtype">void</span> clear();
-00133
-00134 <span class="keyword">private</span>:
-00135 <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
-00136 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00189.html">filter</a>;
-00137
-00139 <a class="code" href="a00189.html">filter</a>* filter_list;
-00140
-00142 <a class="code" href="a00189.html">filter</a>* filter_end;
-00143
-00145 <a class="code" href="a00188.html">empty_task</a>* end_counter;
-00146
-00148 <a class="code" href="a00165.html">atomic<internal::Token></a> input_tokens;
-00149
-00151 internal::Token token_counter;
-00152
-00154 <span class="keywordtype">bool</span> end_of_input;
-00155
-00157 <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00189.html">filter</a>& filter_ );
-00158
-00160 <span class="keywordtype">void</span> inject_token( <a class="code" href="a00228.html">task</a>& <span class="keyword">self</span> );
-00161 };
-00162
-00163 } <span class="comment">// tbb</span>
-00164
-00165 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00301.html b/doc/html/a00301.html
deleted file mode 100644
index 6519f31..0000000
--- a/doc/html/a00301.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>queuing_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>queuing_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_queuing_mutex_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_mutex_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include <cstring></span>
-00025 <span class="preprocessor">#include "atomic.h"</span>
-00026
-00027 <span class="keyword">namespace </span>tbb {
-00028
-00030
-<a name="l00031"></a><a class="code" href="a00208.html">00031</a> <span class="keyword">class </span><a class="code" href="a00208.html">queuing_mutex</a> {
-00032 <span class="keyword">public</span>:
-<a name="l00034"></a><a class="code" href="a00208.html#a0">00034</a> <a class="code" href="a00208.html">queuing_mutex</a>() {
-00035 q_tail = NULL;
-00036 };
-00037
-00039
-<a name="l00041"></a><a class="code" href="a00209.html">00041</a> <span class="keyword">class </span><a class="code" href="a00209.html">scoped_lock</a> : <span class="keyword">private</span> internal:: no_copy {
-00043 <span class="keywordtype">void</span> initialize() {
-00044 <a class="code" href="a00198.html">mutex</a> = NULL;
-00045 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00046 <span class="preprocessor"></span> internal::poison_pointer(next);
-00047 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00048 }
-00049 <span class="keyword">public</span>:
-00051
-<a name="l00052"></a><a class="code" href="a00209.html#a0">00052</a> <a class="code" href="a00209.html">scoped_lock</a>() {initialize();}
-00053
-00055
-<a name="l00056"></a><a class="code" href="a00209.html#a1">00056</a> <a class="code" href="a00209.html">scoped_lock</a>( <a class="code" href="a00208.html">queuing_mutex</a>& m ) {
-00057 initialize();
-00058 <a class="code" href="a00278.html#a37a1">acquire</a>(m);
-00059 }
-00060
-<a name="l00062"></a><a class="code" href="a00209.html#a2">00062</a> ~<a class="code" href="a00209.html">scoped_lock</a>() {
-00063 <span class="keywordflow">if</span>( <a class="code" href="a00198.html">mutex</a> ) <a class="code" href="a00278.html#a37a2">release</a>();
-00064 }
-00065
-00067 <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( <a class="code" href="a00208.html">queuing_mutex</a>& m );
-00068
-00070 <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00208.html">queuing_mutex</a>& m );
-00071
-00073 <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>();
-00074
-00075 <span class="keyword">private</span>:
-00077 <a class="code" href="a00208.html">queuing_mutex</a>* <a class="code" href="a00198.html">mutex</a>;
-00078
-00080 <a class="code" href="a00209.html">scoped_lock</a> *next;
-00081
-00083
-00086 <a class="code" href="a00279.html#a13">internal::uintptr</a> going;
-00087 };
-00088
-00089 <span class="comment">// Mutex traits</span>
-00090 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
-00091 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-00092 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
-00093
-00094 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-00095 <span class="keyword">private</span>:
-00097 <a class="code" href="a00165.html">atomic<scoped_lock*></a> q_tail;
-00098
-00099 };
-00100
-00101 } <span class="comment">// namespace tbb</span>
-00102
-00103 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00302.html b/doc/html/a00302.html
deleted file mode 100644
index 85a0451..0000000
--- a/doc/html/a00302.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>queuing_rw_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>queuing_rw_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_queuing_rw_mutex_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_rw_mutex_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include <cstring></span>
-00025 <span class="preprocessor">#include "atomic.h"</span>
-00026
-00027 <span class="keyword">namespace </span>tbb {
-00028
-00030
-<a name="l00033"></a><a class="code" href="a00210.html">00033</a> <span class="keyword">class </span><a class="code" href="a00210.html">queuing_rw_mutex</a> {
-00034 <span class="keyword">public</span>:
-<a name="l00036"></a><a class="code" href="a00210.html#a0">00036</a> <a class="code" href="a00210.html">queuing_rw_mutex</a>() {
-00037 q_tail = NULL;
-00038 };
-00039
-<a name="l00041"></a><a class="code" href="a00210.html#a1">00041</a> ~<a class="code" href="a00210.html">queuing_rw_mutex</a>() {
-00042 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00043 <span class="preprocessor"></span> __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
-00044 <span class="preprocessor">#endif</span>
-00045 <span class="preprocessor"></span> };
-00046
-00047 <span class="keyword">class </span>scoped_lock;
-00048 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-00049
-00051
-<a name="l00053"></a><a class="code" href="a00211.html">00053</a> <span class="keyword">class </span><a class="code" href="a00211.html">scoped_lock</a> : <span class="keyword">private</span> internal::no_copy {
-00055 <span class="keyword">enum</span> state_t {
-00056 STATE_NONE = 0,
-00057 STATE_WRITER = 1,
-00058 STATE_READER = 1<<1,
-00059 STATE_READER_UNBLOCKNEXT = 1<<2,
-00060 STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
-00061 STATE_ACTIVEREADER = 1<<3,
-00062 STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
-00063 STATE_UPGRADE_REQUESTED = 1<<4,
-00064 STATE_UPGRADE_WAITING = 1<<5,
-00065 STATE_UPGRADE_LOSER = 1<<6,
-00066 STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
-00067 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00068 <span class="preprocessor"></span> ,STATE_INVALID
-00069 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00070 };
-00071
-00073 <span class="keywordtype">void</span> initialize() {
-00074 <a class="code" href="a00198.html">mutex</a> = NULL;
-00075 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00076 <span class="preprocessor"></span> state = STATE_INVALID;
-00077 internal::poison_pointer(next);
-00078 internal::poison_pointer(prev);
-00079 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00080 }
-00081 <span class="keyword">public</span>:
-00083
-<a name="l00084"></a><a class="code" href="a00211.html#a0">00084</a> <a class="code" href="a00211.html">scoped_lock</a>() {initialize();}
-00085
-00087
-<a name="l00088"></a><a class="code" href="a00211.html#a1">00088</a> <a class="code" href="a00211.html">scoped_lock</a>( <a class="code" href="a00210.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
-00089 initialize();
-00090 <a class="code" href="a00278.html#a37a1">acquire</a>(m,write);
-00091 }
-00092
-<a name="l00094"></a><a class="code" href="a00211.html#a2">00094</a> ~<a class="code" href="a00211.html">scoped_lock</a>() {
-00095 <span class="keywordflow">if</span>( <a class="code" href="a00198.html">mutex</a> ) <a class="code" href="a00278.html#a37a2">release</a>();
-00096 }
-00097
-00099 <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( <a class="code" href="a00210.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
-00100
-00102 <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00210.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
-00103
-00105 <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>();
-00106
-00108
-00109 <span class="keywordtype">bool</span> upgrade_to_writer();
-00110
-00112 <span class="keywordtype">bool</span> downgrade_to_reader();
-00113
-00114 <span class="keyword">private</span>:
-00116 <a class="code" href="a00210.html">queuing_rw_mutex</a>* <a class="code" href="a00198.html">mutex</a>;
-00117
-00119 <a class="code" href="a00211.html">scoped_lock</a> * prev, * next;
-00120
-00122 <a class="code" href="a00165.html">atomic<unsigned char></a> state;
-00123
-00125
-00126 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> going;
-00127
-00129 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> internal_lock;
-00130
-00132 <span class="keywordtype">void</span> acquire_internal_lock();
-00133
-00135
-00136 <span class="keywordtype">bool</span> try_acquire_internal_lock();
-00137
-00139 <span class="keywordtype">void</span> release_internal_lock();
-00140
-00142 <span class="keywordtype">void</span> wait_for_release_of_internal_lock();
-00143
-00145 <span class="keywordtype">void</span> unblock_or_wait_on_internal_lock( uintptr_t );
-00146 };
-00147
-00148 <span class="comment">// Mutex traits</span>
-00149 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
-00150 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-00151 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
-00152
-00153 <span class="keyword">private</span>:
-00155 <a class="code" href="a00165.html">atomic<scoped_lock*></a> q_tail;
-00156
-00157 };
-00158
-00159 } <span class="comment">// namespace tbb</span>
-00160
-00161 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_rw_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00304.html b/doc/html/a00304.html
index 47d6b29..49d6d69 100644
--- a/doc/html/a00304.html
+++ b/doc/html/a00304.html
@@ -1,139 +1,340 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>scalable_allocator.h Source File</title>
+<title>scalable_allocator.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>scalable_allocator.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_scalable_allocator_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_scalable_allocator_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include <stddef.h></span> <span class="comment">// Need ptrdiff_t and size_t from here.</span>
-00025
-00026 <span class="preprocessor">#ifdef __cplusplus</span>
-00027 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
-00028 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-00029
-00031
-00032 <span class="keywordtype">void</span> * scalable_malloc (size_t size);
-00033
-00035
-00036 <span class="keywordtype">void</span> scalable_free (<span class="keywordtype">void</span>* ptr);
-00037
-00039
-00040 <span class="keywordtype">void</span> * scalable_realloc (<span class="keywordtype">void</span>* ptr, size_t size);
-00041
-00043
-00044 <span class="keywordtype">void</span> * scalable_calloc (size_t nobj, size_t size);
-00045
-00046 <span class="preprocessor">#ifdef __cplusplus</span>
-00047 <span class="preprocessor"></span>} <span class="comment">// extern "C"</span>
-00048 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-00049
-00050 <span class="preprocessor">#ifdef __cplusplus</span>
-00051 <span class="preprocessor"></span>
-00052 <span class="preprocessor">#include <new></span> <span class="comment">// To use new with the placement argument</span>
-00053
-00054 <span class="keyword">namespace </span>tbb {
-00055
-00057
-00060 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00061 <span class="keyword">class </span>scalable_allocator {
-00062 <span class="keyword">public</span>:
-00063 <span class="keyword">typedef</span> T* pointer;
-00064 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-00065 <span class="keyword">typedef</span> T& reference;
-00066 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00067 <span class="keyword">typedef</span> T value_type;
-00068 <span class="keyword">typedef</span> size_t size_type;
-00069 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00070 <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-00071 <span class="keyword">typedef</span> scalable_allocator<U> other;
-00072 };
-00073
-00074 scalable_allocator() throw() {}
-00075 scalable_allocator( <span class="keyword">const</span> scalable_allocator& ) throw() {}
-00076 <span class="keyword">template</span><<span class="keyword">typename</span> U> scalable_allocator(<span class="keyword">const</span> scalable_allocator<U>&) throw() {}
-00077
-00078 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00079 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00080
-00082 pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
-00083 <span class="keywordflow">return</span> static_cast<pointer>( scalable_malloc( n * <span class="keyword">sizeof</span>(value_type) ) );
-00084 }
-00085
-00087 <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
-00088 scalable_free( p );
-00089 }
-00090
-00092 size_type max_size() const throw() {
-00093 size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (T);
-00094 <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
-00095 }
-00096 <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& val ) { <span class="keyword">new</span>(static_cast<void*>(p)) T(val); }
-00097 <span class="keywordtype">void</span> destroy( pointer p ) {(static_cast<T*>(p))->~T();}
-00098 };
-00099
-00101
-00102 <span class="keyword">template</span><>
-00103 <span class="keyword">class </span>scalable_allocator<void> {
-00104 <span class="keyword">public</span>:
-00105 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-00106 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-00107 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-00108 <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
-00109 <span class="keyword">typedef</span> scalable_allocator<U> other;
-00110 };
-00111 };
-00112
-00113 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00114 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> scalable_allocator<T>&, <span class="keyword">const</span> scalable_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-00115
-00116 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00117 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> scalable_allocator<T>&, <span class="keyword">const</span> scalable_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-00118
-00119 } <span class="comment">// namespace tbb</span>
-00120
-00121 <span class="preprocessor">#if _MSC_VER</span>
-00122 <span class="preprocessor"></span><span class="preprocessor"> #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
-00123 <span class="preprocessor"></span><span class="preprocessor"> #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
-00124 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
-00125 <span class="preprocessor"></span>
-00126 <span class="preprocessor"> #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
-00127 <span class="preprocessor"></span><span class="preprocessor"> #ifdef _DEBUG</span>
-00128 <span class="preprocessor"></span><span class="preprocessor"> #pragma comment(lib, "tbbmalloc_debug.lib")</span>
-00129 <span class="preprocessor"></span><span class="preprocessor"> #else</span>
-00130 <span class="preprocessor"></span><span class="preprocessor"> #pragma comment(lib, "tbbmalloc.lib")</span>
-00131 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
-00132 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
-00133 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00134 <span class="preprocessor"></span>
-00135 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
-00136
-00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
-</pre></div><hr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>scalable_allocator.h File Reference</h1>
+<p>
+<a href="a00346.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html">tbb</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. <a href="a00247.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< T >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00248.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< void >::rebind< U ></b></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a0">scalable_malloc</a> (size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a1">scalable_free</a> (void *ptr)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a2">scalable_realloc</a> (void *ptr, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a3">scalable_calloc</a> (size_t nobj, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a4">scalable_posix_memalign</a> (void **memptr, size_t alignment, size_t size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a5">scalable_aligned_malloc</a> (size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a6">scalable_aligned_realloc</a> (void *ptr, size_t size, size_t alignment)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a7">scalable_aligned_free</a> (void *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a47" doxytag="scalable_allocator.h::operator=="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a48" doxytag="scalable_allocator.h::operator!="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const scalable_allocator< T > &, const scalable_allocator< U > &)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="a7" doxytag="scalable_allocator.h::scalable_aligned_free"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_FUNC scalable_aligned_free </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname1" valign="top" nowrap> <em>ptr</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "_aligned_free" analogue. </td>
+ </tr>
+</table>
+<a class="anchor" name="a5" doxytag="scalable_allocator.h::scalable_aligned_malloc"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC scalable_aligned_malloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_t </td>
+ <td class="mdname" nowrap> <em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>alignment</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "_aligned_malloc" analogue. </td>
+ </tr>
+</table>
+<a class="anchor" name="a6" doxytag="scalable_allocator.h::scalable_aligned_realloc"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC scalable_aligned_realloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname" nowrap> <em>ptr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>size</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>alignment</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "_aligned_realloc" analogue. </td>
+ </tr>
+</table>
+<a class="anchor" name="a3" doxytag="scalable_allocator.h::scalable_calloc"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC scalable_calloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_t </td>
+ <td class="mdname" nowrap> <em>nobj</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>size</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "calloc" analogue complementing scalable_malloc. </td>
+ </tr>
+</table>
+<a class="anchor" name="a1" doxytag="scalable_allocator.h::scalable_free"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_FUNC scalable_free </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname1" valign="top" nowrap> <em>ptr</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "free" analogue to discard a previously allocated piece of memory. </td>
+ </tr>
+</table>
+<a class="anchor" name="a0" doxytag="scalable_allocator.h::scalable_malloc"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC scalable_malloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">size_t </td>
+ <td class="mdname1" valign="top" nowrap> <em>size</em> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "malloc" analogue to allocate block of memory of size bytes. </td>
+ </tr>
+</table>
+<a class="anchor" name="a4" doxytag="scalable_allocator.h::scalable_posix_memalign"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">int __TBB_EXPORTED_FUNC scalable_posix_memalign </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void ** </td>
+ <td class="mdname" nowrap> <em>memptr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>alignment</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>size</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "posix_memalign" analogue. </td>
+ </tr>
+</table>
+<a class="anchor" name="a2" doxytag="scalable_allocator.h::scalable_realloc"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC scalable_realloc </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">void * </td>
+ <td class="mdname" nowrap> <em>ptr</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>size_t </td>
+ <td class="mdname" nowrap> <em>size</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The "realloc" analogue complementing scalable_malloc. </td>
+ </tr>
+</table>
+<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00305.html b/doc/html/a00305.html
deleted file mode 100644
index 3b33c23..0000000
--- a/doc/html/a00305.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>spin_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>spin_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_spin_mutex_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_mutex_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include <cstddef></span>
-00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00026 <span class="preprocessor">#include "tbb/tbb_machine.h"</span>
-00027
-00028 <span class="keyword">namespace </span>tbb {
-00029
-00031
-<a name="l00036"></a><a class="code" href="a00217.html">00036</a> <span class="keyword">class </span><a class="code" href="a00217.html">spin_mutex</a> {
-00038 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> flag;
-00039
-00040 <span class="keyword">public</span>:
-00042
-<a name="l00043"></a><a class="code" href="a00217.html#a0">00043</a> <a class="code" href="a00217.html">spin_mutex</a>() : flag(0) {}
-00044
-<a name="l00046"></a><a class="code" href="a00218.html">00046</a> <span class="keyword">class </span><a class="code" href="a00218.html">scoped_lock</a> : <span class="keyword">private</span> internal::no_copy {
-00047 <span class="keyword">private</span>:
-00049 <a class="code" href="a00217.html">spin_mutex</a>* my_mutex;
-00050
-00052 <a class="code" href="a00279.html#a13">internal::uintptr</a> my_unlock_value;
-00053
-00055 <span class="keywordtype">void</span> internal_acquire( <a class="code" href="a00217.html">spin_mutex</a>& m );
-00056
-00058 <span class="keywordtype">bool</span> internal_try_acquire( <a class="code" href="a00217.html">spin_mutex</a>& m );
-00059
-00061 <span class="keywordtype">void</span> internal_release();
-00062
-00063 <span class="keyword">public</span>:
-<a name="l00065"></a><a class="code" href="a00218.html#a0">00065</a> <a class="code" href="a00218.html">scoped_lock</a>() : my_mutex(NULL), my_unlock_value(0) {}
-00066
-<a name="l00068"></a><a class="code" href="a00218.html#a1">00068</a> <a class="code" href="a00218.html">scoped_lock</a>( <a class="code" href="a00217.html">spin_mutex</a>& m ) {
-00069 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00070 <span class="preprocessor"></span> my_mutex=NULL;
-00071 internal_acquire(m);
-00072 <span class="preprocessor">#else</span>
-00073 <span class="preprocessor"></span> my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00217.html#r0">flag</a>);
-00074 my_mutex=&m;
-00075 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/</span>
-00076 }
-00077
-<a name="l00079"></a><a class="code" href="a00218.html#a2">00079</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( <a class="code" href="a00217.html">spin_mutex</a>& m ) {
-00080 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00081 <span class="preprocessor"></span> internal_acquire(m);
-00082 <span class="preprocessor">#else</span>
-00083 <span class="preprocessor"></span> my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00217.html#r0">flag</a>);
-00084 my_mutex = &m;
-00085 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/</span>
-00086 }
-00087
-<a name="l00089"></a><a class="code" href="a00218.html#a3">00089</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00217.html">spin_mutex</a>& m ) {
-00090 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00091 <span class="preprocessor"></span> <span class="keywordflow">return</span> internal_try_acquire(m);
-00092 <span class="preprocessor">#else</span>
-00093 <span class="preprocessor"></span> <span class="keywordtype">bool</span> result = __TBB_TryLockByte(m.<a class="code" href="a00217.html#r0">flag</a>);
-00094 <span class="keywordflow">if</span>( result ) {
-00095 my_unlock_value = 0;
-00096 my_mutex = &m;
-00097 }
-00098 <span class="keywordflow">return</span> result;
-00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/</span>
-00100 }
-00101
-<a name="l00103"></a><a class="code" href="a00218.html#a4">00103</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>() {
-00104 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00105 <span class="preprocessor"></span> internal_release();
-00106 <span class="preprocessor">#else</span>
-00107 <span class="preprocessor"></span> __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
-00108 my_mutex = NULL;
-00109 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00110 }
-00111
-<a name="l00113"></a><a class="code" href="a00218.html#a5">00113</a> ~<a class="code" href="a00218.html">scoped_lock</a>() {
-00114 <span class="keywordflow">if</span>( my_mutex ) {
-00115 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00116 <span class="preprocessor"></span> internal_release();
-00117 <span class="preprocessor">#else</span>
-00118 <span class="preprocessor"></span> __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
-00119 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00120 }
-00121 }
-00122 };
-00123
-00124 <span class="comment">// Mutex traits</span>
-00125 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
-00126 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-00127 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
-00128
-00129 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
-00130 };
-00131
-00132 } <span class="comment">// namespace tbb</span>
-00133
-00134 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00306.html b/doc/html/a00306.html
deleted file mode 100644
index 4b6f7df..0000000
--- a/doc/html/a00306.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>spin_rw_mutex.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>spin_rw_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_spin_rw_mutex_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_rw_mutex_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-00026
-00027 <span class="keyword">namespace </span>tbb {
-00028
-00029 <span class="keyword">class </span>spin_rw_mutex_v3;
-00030 <span class="keyword">typedef</span> spin_rw_mutex_v3 spin_rw_mutex;
-00031
-00033
-<a name="l00034"></a><a class="code" href="a00219.html">00034</a> <span class="keyword">class </span><a class="code" href="a00219.html">spin_rw_mutex_v3</a> {
-00036
-00038 <span class="keywordtype">bool</span> internal_acquire_writer();
-00039
-00041
-00042 <span class="keywordtype">void</span> internal_release_writer();
-00043
-00045 <span class="keywordtype">void</span> internal_acquire_reader();
-00046
-00048 <span class="keywordtype">bool</span> internal_upgrade();
-00049
-00051
-00052 <span class="keywordtype">void</span> internal_downgrade();
-00053
-00055 <span class="keywordtype">void</span> internal_release_reader();
-00056
-00058 <span class="keywordtype">bool</span> internal_try_acquire_writer();
-00059
-00061 <span class="keywordtype">bool</span> internal_try_acquire_reader();
-00062
-00064 <span class="keyword">public</span>:
-<a name="l00066"></a><a class="code" href="a00219.html#a0">00066</a> <a class="code" href="a00219.html">spin_rw_mutex_v3</a>() : state(0) {}
-00067
-00068 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00069 <span class="preprocessor"></span>
-00070 ~<a class="code" href="a00219.html">spin_rw_mutex_v3</a>() {
-00071 __TBB_ASSERT( !state, <span class="stringliteral">"destruction of an acquired mutex"</span>);
-00072 };
-00073 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00074
-00076
-<a name="l00078"></a><a class="code" href="a00220.html">00078</a> <span class="keyword">class </span><a class="code" href="a00220.html">scoped_lock</a> : <span class="keyword">private</span> internal::no_copy {
-00079 <span class="keyword">public</span>:
-00081
-<a name="l00082"></a><a class="code" href="a00220.html#a0">00082</a> <a class="code" href="a00220.html">scoped_lock</a>() : <a class="code" href="a00198.html">mutex</a>(NULL) {}
-00083
-00085
-<a name="l00086"></a><a class="code" href="a00220.html#a1">00086</a> <a class="code" href="a00220.html">scoped_lock</a>( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00198.html">mutex</a>(NULL) {
-00087 <a class="code" href="a00278.html#a37a1">acquire</a>(m, write);
-00088 }
-00089
-<a name="l00091"></a><a class="code" href="a00220.html#a2">00091</a> ~<a class="code" href="a00220.html">scoped_lock</a>() {
-00092 <span class="keywordflow">if</span>( <a class="code" href="a00198.html">mutex</a> ) <a class="code" href="a00278.html#a37a2">release</a>();
-00093 }
-00094
-<a name="l00096"></a><a class="code" href="a00220.html#a3">00096</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-00097 __TBB_ASSERT( !<a class="code" href="a00198.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
-00098 is_writer = write;
-00099 <a class="code" href="a00198.html">mutex</a> = &m;
-00100 <span class="keywordflow">if</span>( write ) <a class="code" href="a00198.html">mutex</a>-><a class="code" href="a00219.html#d0">internal_acquire_writer</a>();
-00101 <span class="keywordflow">else</span> <a class="code" href="a00198.html">mutex</a>-><a class="code" href="a00219.html#d2">internal_acquire_reader</a>();
-00102 }
-00103
-00105
-<a name="l00106"></a><a class="code" href="a00220.html#a4">00106</a> <span class="keywordtype">bool</span> upgrade_to_writer() {
-00107 __TBB_ASSERT( <a class="code" href="a00198.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-00108 __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
-00109 is_writer = <span class="keyword">true</span>;
-00110 <span class="keywordflow">return</span> <a class="code" href="a00198.html">mutex</a>-><a class="code" href="a00219.html#d3">internal_upgrade</a>();
-00111 }
-00112
-<a name="l00114"></a><a class="code" href="a00220.html#a5">00114</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>() {
-00115 __TBB_ASSERT( <a class="code" href="a00198.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-00116 spin_rw_mutex *m = <a class="code" href="a00198.html">mutex</a>;
-00117 <a class="code" href="a00198.html">mutex</a> = NULL;
-00118 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00119 <span class="preprocessor"></span> <span class="keywordflow">if</span>( is_writer ) m-><a class="code" href="a00219.html#d1">internal_release_writer</a>();
-00120 <span class="keywordflow">else</span> m-><a class="code" href="a00219.html#d5">internal_release_reader</a>();
-00121 <span class="preprocessor">#else</span>
-00122 <span class="preprocessor"></span> <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00219.html#r0">state</a>, READERS );
-00123 <span class="keywordflow">else</span> __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00219.html#r0">state</a>, -(intptr_t)ONE_READER);
-00124 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00125 }
-00126
-<a name="l00128"></a><a class="code" href="a00220.html#a6">00128</a> <span class="keywordtype">bool</span> downgrade_to_reader() {
-00129 <span class="preprocessor">#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT</span>
-00130 <span class="preprocessor"></span> __TBB_ASSERT( <a class="code" href="a00198.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
-00131 __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
-00132 <a class="code" href="a00198.html">mutex</a>-><a class="code" href="a00219.html#d4">internal_downgrade</a>();
-00133 <span class="preprocessor">#else</span>
-00134 <span class="preprocessor"></span> __TBB_FetchAndAddW( &<a class="code" href="a00198.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
-00135 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */</span>
-00136 is_writer = <span class="keyword">false</span>;
-00137
-00138 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00139 }
-00140
-<a name="l00142"></a><a class="code" href="a00220.html#a7">00142</a> <span class="keywordtype">bool</span> try_acquire( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
-00143 __TBB_ASSERT( !<a class="code" href="a00198.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
-00144 <span class="keywordtype">bool</span> result;
-00145 is_writer = write;
-00146 result = write? m.<a class="code" href="a00219.html#d6">internal_try_acquire_writer</a>()
-00147 : m.<a class="code" href="a00219.html#d7">internal_try_acquire_reader</a>();
-00148 <span class="keywordflow">if</span>( result )
-00149 <a class="code" href="a00198.html">mutex</a> = &m;
-00150 <span class="keywordflow">return</span> result;
-00151 }
-00152
-00153 <span class="keyword">private</span>:
-00155 spin_rw_mutex* <a class="code" href="a00198.html">mutex</a>;
-00156
-00158
-00159 <span class="keywordtype">bool</span> is_writer;
-00160 };
-00161
-00162 <span class="comment">// Mutex traits</span>
-00163 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
-00164 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
-00165 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
-00166
-00167 <span class="keyword">private</span>:
-00168 <span class="keyword">typedef</span> intptr_t state_t;
-00169 <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER = 1;
-00170 <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER_PENDING = 2;
-00171 <span class="keyword">static</span> <span class="keyword">const</span> state_t READERS = ~(WRITER | WRITER_PENDING);
-00172 <span class="keyword">static</span> <span class="keyword">const</span> state_t ONE_READER = 4;
-00173 <span class="keyword">static</span> <span class="keyword">const</span> state_t BUSY = WRITER | READERS;
-00175
-00178 state_t state;
-00179 };
-00180
-00181 } <span class="comment">// namespace ThreadingBuildingBlocks</span>
-00182
-00183 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_rw_mutex_H */</span>
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00315.html b/doc/html/a00315.html
deleted file mode 100644
index 4e4d234..0000000
--- a/doc/html/a00315.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>tick_count.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tick_count.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
-00003 <span class="comment"></span>
-00004 <span class="comment"> The source code contained or described herein and all documents related</span>
-00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
-00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
-00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
-00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
-00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
-00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
-00011 <span class="comment"> Intel's prior express written permission.</span>
-00012 <span class="comment"></span>
-00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
-00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
-00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
-00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
-00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
-00018 <span class="comment"> writing.</span>
-00019 <span class="comment">*/</span>
-00020
-00021 <span class="preprocessor">#ifndef __TBB_tick_count_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tick_count_H</span>
-00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025
-00026 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00027 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
-00028 <span class="preprocessor">#elif __linux__</span>
-00029 <span class="preprocessor"></span><span class="preprocessor">#include <ctime></span>
-00030 <span class="preprocessor">#include <stdio.h></span>
-00031 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-00032 <span class="preprocessor">#include <sys/time.h></span>
-00033 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
-00034
-00035 <span class="keyword">namespace </span>tbb {
-00036
-00038
-<a name="l00039"></a><a class="code" href="a00236.html">00039</a> <span class="keyword">class </span><a class="code" href="a00236.html">tick_count</a> {
-00040 <span class="keyword">public</span>:
-<a name="l00042"></a><a class="code" href="a00237.html">00042</a> <span class="keyword">class </span><a class="code" href="a00237.html">interval_t</a> {
-00043 <span class="keywordtype">long</span> <span class="keywordtype">long</span> value;
-00044 <span class="keyword">explicit</span> <a class="code" href="a00237.html">interval_t</a>( <span class="keywordtype">long</span> <span class="keywordtype">long</span> value_ ) : value(value_) {}
-00045 <span class="keyword">public</span>:
-<a name="l00047"></a><a class="code" href="a00237.html#a0">00047</a> <a class="code" href="a00237.html">interval_t</a>() : value(0) {};
-00048
-00050 <span class="keyword">explicit</span> <a class="code" href="a00237.html">interval_t</a>( <span class="keywordtype">double</span> sec );
-00051
-00053 <span class="keywordtype">double</span> seconds() <span class="keyword">const</span>;
-00054
-00055 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00236.html">tbb::tick_count</a>;
-00056
-00058 <span class="keyword">friend</span> <a class="code" href="a00237.html">interval_t</a> <a class="code" href="a00236.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t0 );
-00059
-<a name="l00061"></a><a class="code" href="a00237.html#n2">00061</a> <span class="keyword">friend</span> <a class="code" href="a00237.html">interval_t</a> operator+( <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& j ) {
-00062 <span class="keywordflow">return</span> <a class="code" href="a00237.html">interval_t</a>(i.<a class="code" href="a00237.html#r0">value</a>+j.<a class="code" href="a00237.html#r0">value</a>);
-00063 }
-00064
-<a name="l00066"></a><a class="code" href="a00237.html#n3">00066</a> <span class="keyword">friend</span> <a class="code" href="a00237.html">interval_t</a> <a class="code" href="a00236.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& j ) {
-00067 <span class="keywordflow">return</span> <a class="code" href="a00237.html">interval_t</a>(i.<a class="code" href="a00237.html#r0">value</a>-j.<a class="code" href="a00237.html#r0">value</a>);
-00068 }
-00069
-<a name="l00071"></a><a class="code" href="a00237.html#a3">00071</a> <a class="code" href="a00237.html">interval_t</a>& operator+=( <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& i ) {value += i.<a class="code" href="a00237.html#r0">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-00072
-<a name="l00074"></a><a class="code" href="a00237.html#a4">00074</a> <a class="code" href="a00237.html">interval_t</a>& operator-=( <span class="keyword">const</span> <a class="code" href="a00237.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00237.html#r0">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-00075 };
-00076
-<a name="l00078"></a><a class="code" href="a00236.html#a0">00078</a> <a class="code" href="a00236.html#a0">tick_count</a>() : my_count(0) {};
-00079
-00081 <span class="keyword">static</span> <a class="code" href="a00236.html">tick_count</a> <a class="code" href="a00236.html#e0">now</a>();
-00082
-00084 <span class="keyword">friend</span> interval_t <a class="code" href="a00236.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t0 );
-00085
-00086 <span class="keyword">private</span>:
-00087 <span class="keywordtype">long</span> <span class="keywordtype">long</span> my_count;
-00088 };
-00089
-<a name="l00090"></a><a class="code" href="a00236.html#e0">00090</a> <span class="keyword">inline</span> <a class="code" href="a00236.html">tick_count</a> <a class="code" href="a00236.html#e0">tick_count::now</a>() {
-00091 <a class="code" href="a00236.html">tick_count</a> result;
-00092 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00093 <span class="preprocessor"></span> LARGE_INTEGER qpcnt;
-00094 QueryPerformanceCounter(&qpcnt);
-00095 result.<a class="code" href="a00236.html#r0">my_count</a> = qpcnt.QuadPart;
-00096 <span class="preprocessor">#elif __linux__</span>
-00097 <span class="preprocessor"></span> <span class="keyword">struct </span>timespec ts;
-00098 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00099 <span class="preprocessor"></span> <span class="keywordtype">int</span> status =
-00100 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00101 clock_gettime( CLOCK_REALTIME, &ts );
-00102 __TBB_ASSERT( status==0, <span class="stringliteral">"CLOCK_REALTIME not supported"</span> );
-00103 result.<a class="code" href="a00236.html#r0">my_count</a> = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
-00104 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-00105 <span class="keyword">struct </span>timeval tv;
-00106 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00107 <span class="preprocessor"></span> <span class="keywordtype">int</span> status =
-00108 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00109 gettimeofday(&tv, NULL);
-00110 __TBB_ASSERT( status==0, <span class="stringliteral">"gettimeofday failed"</span> );
-00111 result.<a class="code" href="a00236.html#r0">my_count</a> = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
-00112 <span class="preprocessor">#endif </span><span class="comment">/*(choice of OS) */</span>
-00113 <span class="keywordflow">return</span> result;
-00114 }
-00115
-<a name="l00116"></a><a class="code" href="a00237.html#a1">00116</a> <span class="keyword">inline</span> tick_count::interval_t::interval_t( <span class="keywordtype">double</span> sec )
-00117 {
-00118 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00119 <span class="preprocessor"></span> LARGE_INTEGER qpfreq;
-00120 QueryPerformanceFrequency(&qpfreq);
-00121 value = static_cast<long long>(sec*qpfreq.QuadPart);
-00122 <span class="preprocessor">#elif __linux__</span>
-00123 <span class="preprocessor"></span> value = static_cast<long long>(sec*1E9);
-00124 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-00125 value = static_cast<long long>(sec*1E6);
-00126 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
-00127 }
-00128
-<a name="l00129"></a><a class="code" href="a00236.html#n0">00129</a> <span class="keyword">inline</span> <a class="code" href="a00237.html">tick_count::interval_t</a> <a class="code" href="a00236.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00236.html">tick_count</a>& t0 ) {
-00130 <span class="keywordflow">return</span> <a class="code" href="a00237.html">tick_count::interval_t</a>( t1.<a class="code" href="a00236.html#r0">my_count</a>-t0.<a class="code" href="a00236.html#r0">my_count</a> );
-00131 }
-00132
-<a name="l00133"></a><a class="code" href="a00237.html#a2">00133</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> tick_count::interval_t::seconds()<span class="keyword"> const </span>{
-00134 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00135 <span class="preprocessor"></span> LARGE_INTEGER qpfreq;
-00136 QueryPerformanceFrequency(&qpfreq);
-00137 <span class="keywordflow">return</span> value/(double)qpfreq.QuadPart;
-00138 <span class="preprocessor">#elif __linux__</span>
-00139 <span class="preprocessor"></span> <span class="keywordflow">return</span> value*1E-9;
-00140 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
-00141 <span class="keywordflow">return</span> value*1E-6;
-00142 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
-00143 }
-00144
-00145 } <span class="comment">// namespace tbb</span>
-00146
-00147 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tick_count_H */</span>
-00148
-</pre></div><hr>
-<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
-<p></p>
-Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
-registered trademarks or trademarks of Intel Corporation or its
-subsidiaries in the United States and other countries.
-<p></p>
-* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00318.html b/doc/html/a00318.html
new file mode 100644
index 0000000..79d3dd1
--- /dev/null
+++ b/doc/html/a00318.html
@@ -0,0 +1,585 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb Namespace Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb Namespace Reference</h1>The namespace tbb contains all components of the library.
+<a href="#_details">More...</a>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html">tbb::aligned_space< T, N ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Block of space aligned sufficiently to construct an array T with N elements. <a href="a00190.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">tbb::atomic< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Primary template for atomic. <a href="a00191.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::atomic< void * ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::atomic< bool ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate. <a href="a00195.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept. <a href="a00196.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept. <a href="a00197.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. <a href="a00198.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::cache_aligned_allocator< T >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00199.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::cache_aligned_allocator< void >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">hash_compare - default argument <a href="a00269.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Unordered map from Key to T. <a href="a00201.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combines data access, locking, and garbage collection. <a href="a00203.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allows write access to elements and combines data access, locking, and garbage collection. <a href="a00202.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::node</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Basic unit of storage used in chain. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::chain</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A linked-list of nodes. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_hash_map< Key, T, HashCompare, A >::segment</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Segment of the table. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A high-performance thread-safe queue. <a href="a00204.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_queue< T, A >::destroyer</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class used to ensure exception-safety of method "pop". <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Concurrent vector container <a href="a00209.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_vector< T, A >::generic_range_type< I ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::concurrent_vector< T, A >::internal_loop_guide</b></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception-aware helper class for filling a segment by exception-danger operators of user class. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html">tbb::mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper around the platform's native reader-writer lock. <a href="a00227.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00228.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::null_mutex</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::null_mutex::scoped_lock</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::null_rw_mutex</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::null_rw_mutex::scoped_lock</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class the user supplied algorithm body uses to add new tasks <a href="a00231.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">tbb::pre_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed. <a href="a00237.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">tbb::final_scan_tag</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed. <a href="a00217.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work. <a href="a00234.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00249.html">tbb::simple_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner <a href="a00249.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::simple_partitioner::partition_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::auto_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner. <a href="a00193.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::auto_partitioner::partition_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An affinity partitioner. <a href="a00188.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html">tbb::filter</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline. <a href="a00216.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">tbb::pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items. <a href="a00236.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">tbb::queuing_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Queuing lock with local-only spinning. <a href="a00238.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00239.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Reader-writer lock with local-only spinning. <a href="a00240.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00241.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html">tbb::recursive_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Mutex that allows recursive mutex acquisition. <a href="a00245.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00246.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. <a href="a00247.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< T >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00248.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::scalable_allocator< void >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html">tbb::spin_mutex</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A lock that occupies a single byte. <a href="a00250.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Represents acquisition of a mutex. <a href="a00251.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Fast, unfair, spinning reader-writer lock with backoff and writer-preference. <a href="a00252.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The scoped locking pattern. <a href="a00253.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html">tbb::task_group_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to form groups of tasks. <a href="a00262.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html">tbb::task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for user-defined tasks. <a href="a00261.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html">tbb::empty_task</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">task that does nothing. Useful for synchronization. <a href="a00215.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00263.html">tbb::task_list</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A list of children. <a href="a00263.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class representing reference to tbb scheduler. <a href="a00265.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5. <a href="a00266.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::tbb_allocator< T >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1. <a href="a00267.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::tbb_allocator< void >::rebind< U ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">tbb::bad_last_alloc</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Exception for concurrent containers. <a href="a00194.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html">tbb::tbb_exception</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads. <a href="a00268.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html">tbb::captured_exception</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">This class is used by TBB to propagate information about unhandled exceptions into the root thread. <a href="a00200.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread. <a href="a00226.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html">tbb::split</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor. <a href="a00254.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html">tbb::tick_count</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Absolute timestamp. <a href="a00272.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Relative time interval. <a href="a00273.html#_details">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. * <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga3" doxytag="tbb::parallel_do"></a>
+template<typename Iterator, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga3">parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga4" doxytag="tbb::parallel_do"></a>
+template<typename Iterator, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga4">parallel_do</a> (Iterator first, Iterator last, const Body &body, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_for</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_for_body_req.html">parallel_for Body</a>. * <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga5" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga5">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner=<a class="el" href="a00249.html">simple_partitioner</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner, or default partitioner if no partitioner is specified. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga6" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga6">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga7">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga8" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga8">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga9" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga9">parallel_for</a> (const Range &range, const Body &body, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga10" doxytag="tbb::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga10">parallel_for</a> (const Range &range, const Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_reduce</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_reduce_body_req.html">parallel_reduce Body</a>. * <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga11" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga11">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner=<a class="el" href="a00249.html">simple_partitioner</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.html">simple_partitioner</a>, or no partitioner specified. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga12" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga12">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga13" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga13">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga14" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga14">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga15" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga15">parallel_reduce</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga16" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga16">parallel_reduce</a> (const Range &range, Body &body, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga17" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga17">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner=<a class="el" href="a00249.html">simple_partitioner</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.html">simple_partitioner</a>, or no partitioner specified. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga18" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga18">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga19" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga19">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga20" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga20">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga21" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga21">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga22" doxytag="tbb::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga22">parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, <a class="el" href="a00188.html">affinity_partitioner</a> &partitioner, <a class="el" href="a00262.html">task_group_context</a> &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. * <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga23" doxytag="tbb::parallel_scan"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga23">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00249.html">simple_partitioner</a> &partitioner=<a class="el" href="a00249.html">simple_partitioner</a>())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00249.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga24" doxytag="tbb::parallel_scan"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga24">parallel_scan</a> (const Range &range, Body &body, const <a class="el" href="a00193.html">auto_partitioner</a> &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td colspan="2"><br><h2>parallel_sort</h2></td></tr>
+<tr><td colspan="2">See also requirements on <a class="el" href="parallel_sort_iter_req.html">iterators for parallel_sort</a>. * <br><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2">template<typename RandomAccessIterator, typename Compare> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga26">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator. <a href="a00321.html#ga26"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga27" doxytag="tbb::parallel_sort"></a>
+template<typename RandomAccessIterator> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga27">parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga28" doxytag="tbb::parallel_sort"></a>
+template<typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga28">parallel_sort</a> (T *begin, T *end)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>. <br></td></tr>
+<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::spin_rw_mutex"></a>
+typedef <a class="el" href="a00252.html">spin_rw_mutex_v3</a> </td><td class="memItemRight" valign="bottom"><b>spin_rw_mutex</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::stack_size_type"></a>
+typedef std::size_t </td><td class="memItemRight" valign="bottom"><b>stack_size_type</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::task_scheduler_observer"></a>
+typedef internal::task_scheduler_observer_v3 </td><td class="memItemRight" valign="bottom"><b>task_scheduler_observer</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::assertion_handler_type"></a>
+typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a6">assertion_handler_type</a> )(const char *filename, int line, const char *expression, const char *comment)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type for an assertion handler. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::tbb_thread"></a>
+typedef <a class="el" href="a00270.html">internal::tbb_thread_v3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a7">tbb_thread</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Users reference thread class by name tbb_thread. <br></td></tr>
+<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a57">memory_semantics</a> { <a class="el" href="a00318.html#a57a0">__TBB_full_fence</a>,
+<a class="el" href="a00318.html#a57a1">acquire</a>,
+<a class="el" href="a00318.html#a57a2">release</a>
+ }</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Specifies memory fencing. <a href="#a57">More...</a><br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::__TBB_DECL_ATOMIC"></a>
+ </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC</b> (__TBB_LONG_LONG) __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG) __TBB_DECL_ATOMIC(long) __TBB_DECL_ATOMIC(unsigned long) __TBB_DECL_ATOMIC_ALT(unsigned</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::__TBB_DECL_ATOMIC_ALT"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_ATOMIC_ALT</b> (int, ptrdiff_t) __TBB_DECL_ATOMIC(unsigned) __TBB_DECL_ATOMIC(int) __TBB_DECL_ATOMIC(unsigned short) __TBB_DECL_ATOMIC(short) __TBB_DECL_ATOMIC(char) __TBB_DECL_ATOMIC(signed char) __TBB_DECL_ATOMIC(unsigned char) __TBB_DECL_ATOMIC(wchar_t) template< typename T > struct <a class="el" href="a00191.html">atomic</a>< T * ></td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a10" doxytag="tbb::operator=="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00198.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00198.html">cache_aligned_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a11" doxytag="tbb::operator!="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00198.html">cache_aligned_allocator</a>< T > &, const <a class="el" href="a00198.html">cache_aligned_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a12" doxytag="tbb::operator=="></a>
+template<typename Key, typename T, typename HashCompare, typename A1, typename A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a13" doxytag="tbb::operator!="></a>
+template<typename Key, typename T, typename HashCompare, typename A1, typename A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A1 > &a, const <a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a14" doxytag="tbb::swap"></a>
+template<typename Key, typename T, typename HashCompare, typename A> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &a, <a class="el" href="a00201.html">concurrent_hash_map</a>< Key, T, HashCompare, A > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a15" doxytag="tbb::operator=="></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a16" doxytag="tbb::operator!="></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a17" doxytag="tbb::operator<"></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a18" doxytag="tbb::operator>"></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a19" doxytag="tbb::operator<="></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a20" doxytag="tbb::operator>="></a>
+template<typename T, class A1, class A2> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00209.html">concurrent_vector</a>< T, A1 > &a, const <a class="el" href="a00209.html">concurrent_vector</a>< T, A2 > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a21" doxytag="tbb::swap"></a>
+template<typename T, class A> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00209.html">concurrent_vector</a>< T, A > &a, <a class="el" href="a00209.html">concurrent_vector</a>< T, A > &b)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a47" doxytag="tbb::operator=="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00247.html">scalable_allocator</a>< T > &, const <a class="el" href="a00247.html">scalable_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a48" doxytag="tbb::operator!="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00247.html">scalable_allocator</a>< T > &, const <a class="el" href="a00247.html">scalable_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a49" doxytag="tbb::operator=="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00266.html">tbb_allocator</a>< T > &, const <a class="el" href="a00266.html">tbb_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a50" doxytag="tbb::operator!="></a>
+template<typename T, typename U> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00266.html">tbb_allocator</a>< T > &, const <a class="el" href="a00266.html">tbb_allocator</a>< U > &)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a51" doxytag="tbb::set_assertion_handler"></a>
+<a class="el" href="a00318.html#a6">assertion_handler_type</a> __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a51">set_assertion_handler</a> (<a class="el" href="a00318.html#a6">assertion_handler_type</a> new_handler)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set assertion handler and return previous value of it. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a52">assertion_failure</a> (const char *filename, int line, const char *expression, const char *comment)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Process an assertion failure. <a href="#a52"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#a53">TBB_runtime_interface_version</a> ()</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">The function returns the interface version of the TBB shared library being used. <a href="#a53"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a54" doxytag="tbb::swap"></a>
+void </td><td class="memItemRight" valign="bottom"><b>swap</b> (<a class="el" href="a00270.html">internal::tbb_thread_v3</a> &t1, <a class="el" href="a00270.html">internal::tbb_thread_v3</a> &t2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a55" doxytag="tbb::move"></a>
+void </td><td class="memItemRight" valign="bottom"><b>move</b> (<a class="el" href="a00270.html">tbb_thread</a> &t1, <a class="el" href="a00270.html">tbb_thread</a> &t2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a56" doxytag="tbb::operator-"></a>
+<a class="el" href="a00273.html">tick_count::interval_t</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00272.html">tick_count</a> &t1, const <a class="el" href="a00272.html">tick_count</a> &t0)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+The namespace tbb contains all components of the library. <hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="a57" doxytag="tbb::memory_semantics"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">enum <a class="el" href="a00318.html#a57">memory_semantics</a> </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Specifies memory fencing.
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="a57a0" doxytag="__TBB_full_fence"></a>__TBB_full_fence</em> </td><td>
+For internal use only. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a57a1" doxytag="acquire"></a>acquire</em> </td><td>
+Acquire fence. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="a57a2" doxytag="release"></a>release</em> </td><td>
+Release fence. </td></tr>
+</table>
+</dl>
+ </td>
+ </tr>
+</table>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="a52" doxytag="tbb::assertion_failure"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_FUNC assertion_failure </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">const char * </td>
+ <td class="mdname" nowrap> <em>filename</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>int </td>
+ <td class="mdname" nowrap> <em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const char * </td>
+ <td class="mdname" nowrap> <em>expression</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>const char * </td>
+ <td class="mdname" nowrap> <em>comment</em></td>
+ </tr>
+ <tr>
+ <td class="md"></td>
+ <td class="md">) </td>
+ <td class="md" colspan="2"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Process an assertion failure.
+<p>
+Normally called from __TBB_ASSERT macro. If assertion handler is null, print message for assertion failure and abort. Otherwise call the assertion handler. </td>
+ </tr>
+</table>
+<a class="anchor" name="a53" doxytag="tbb::TBB_runtime_interface_version"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">int __TBB_EXPORTED_FUNC TBB_runtime_interface_version </td>
+ <td class="md" valign="top">( </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+The function returns the interface version of the TBB shared library being used.
+<p>
+The version it returns is determined at runtime, not at compile/link time. So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time. </td>
+ </tr>
+</table>
+<hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00279.html b/doc/html/a00319.html
similarity index 57%
copy from doc/html/a00279.html
copy to doc/html/a00319.html
index 45a8957..75c645f 100644
--- a/doc/html/a00279.html
+++ b/doc/html/a00319.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb::internal Namespace Reference</h1>INTERNAL
<a href="#_details">More...</a>
<p>
@@ -19,51 +19,57 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< 8 ></b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< 1 ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< 2 ></b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_word< 4 ></b></td></tr>
+
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_base< uint64_t ></b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_base< int64_t ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_impl< I, D, Step ></b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::atomic_impl</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">base class of <a class="el" href="a00174.html">concurrent_hash_map</a> <a href="a00195.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">base class of <a class="el" href="a00201.html">concurrent_hash_map</a> <a href="a00222.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::hash_map_segment_base</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL */. <a href="a00196.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL */. <a href="a00223.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Range class used with <a class="el" href="a00174.html">concurrent_hash_map</a>. <a href="a00197.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Range class used with <a class="el" href="a00201.html">concurrent_hash_map</a>. <a href="a00224.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00178.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00205.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Prefix on a page. <a href="a00179.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Prefix on a page. <a href="a00206.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Type-independent portion of <a class="el" href="a00180.html">concurrent_queue_iterator</a>. <a href="a00181.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type-independent portion of <a class="el" href="a00207.html">concurrent_queue_iterator</a>. <a href="a00208.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL. <a href="a00180.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL. <a href="a00207.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class of concurrent vector implementation. <a href="a00183.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class of concurrent vector implementation. <a href="a00210.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::concurrent_vector_base_v3::segment_t</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Internal structure for compact(). <a href="a00184.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Internal structure for compact(). <a href="a00211.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/. <a href="a00238.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00195.html">blocked_range</a>.*/. <a href="a00274.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocator_base< T, A ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html">tbb::internal::strip< T ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00259.html">tbb::internal::strip< T ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Strips its template type argument from 'cv' and '&' qualifiers. <a href="a00226.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Strips its template type argument from 'cv' and '&' qualifiers. <a href="a00259.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< T & ></b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const T & ></b></td></tr>
@@ -78,77 +84,87 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::strip< const volatile T ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00203.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00233.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00186.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00213.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::do_iteration_task_iter< Iterator, Body, Item ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00202.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00232.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00185.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00212.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::do_group_task_input< Body, Item ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00214.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00187.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used in parallel_for. <a href="a00255.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used in parallel_for. <a href="a00222.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce. <a href="a00219.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce. <a href="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce. <a href="a00256.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce. <a href="a00223.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>. <a href="a00220.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00193.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>. <a href="a00257.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00224.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary class for parallel_reduce; for internal use only. <a href="a00225.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs final scan for a leaf. <a href="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs final scan for a leaf. <a href="a00218.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split work to be done in the scan. <a href="a00227.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Split work to be done in the scan. <a href="a00260.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combine partial results. <a href="a00194.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combine partial results. <a href="a00221.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial task to split the work. <a href="a00225.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial task to split the work. <a href="a00258.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Range used in quicksort to split elements into subranges based on a value. <a href="a00213.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Range used in quicksort to split elements into subranges based on a value. <a href="a00244.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to sort elements in a range that is smaller than the grainsize. <a href="a00212.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to test if elements in a range are presorted. <a href="a00243.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00241.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to sort elements in a range that is smaller than the grainsize. <a href="a00242.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00240.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00277.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00242.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00276.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Defines entry points into tbb run-time library;. <a href="a00163.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00278.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Provides default methods for partition objects without affinity. <a href="a00205.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Defines entry points into tbb run-time library;. <a href="a00189.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Provides default methods for partition objects without affinity. <a href="a00235.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::affinity_partition_type</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::scheduler</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::context_list_node_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_root_with_context_proxy</b></td></tr>
+
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_root_proxy</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_continuation_proxy</b></td></tr>
@@ -157,14 +173,16 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::allocate_additional_child_of_proxy</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory prefix to a task object. <a href="a00230.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Memory prefix to a task object. <a href="a00264.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::task_scheduler_observer_v3</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class that implements exponential backoff. <a href="a00192.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::__TBB_machine_type_with_strictest_alignment</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Class that implements exponential backoff. <a href="a00166.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< N ></b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 1 ></b></td></tr>
@@ -175,263 +193,359 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::type_with_alignment< 8 ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html">tbb::internal::no_copy</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for types that should not be copied or assigned. <a href="a00200.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html">tbb::internal::version_tag_v3</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Work around for bug in GNU 3.2 and MSVC compilers. <a href="a00279.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html">tbb::internal::no_assign</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for types that should not be assigned. <a href="a00229.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">tbb::internal::no_copy</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class for types that should not be copied or assigned. <a href="a00230.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00275.html">tbb::internal::version_tag_v3</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_base</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_0< F ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Structure used to pass user function with 1 argument to thread. <a href="a00235.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Structure used to pass user function with 1 argument to thread. <a href="a00271.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><b>tbb::internal::thread_closure_2< F, X, Y ></b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Versioned thread class. <a href="a00234.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Versioned thread class. <a href="a00270.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><b>tbb::internal::tbb_thread_v3::id</b></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="tbb::internal::concurrent_queue_base"></a>
-typedef <a class="el" href="a00178.html">concurrent_queue_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_base</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::hashcode_t"></a>
+typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a2">hashcode_t</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="tbb::internal::concurrent_queue_iterator_base"></a>
-typedef <a class="el" href="a00181.html">concurrent_queue_iterator_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_base</b></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Type of a hash code. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a4" doxytag="tbb::internal::concurrent_queue_base"></a>
+typedef <a class="el" href="a00205.html">concurrent_queue_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_base</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::concurrent_vector_base"></a>
-typedef <a class="el" href="a00183.html">concurrent_vector_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_vector_base</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::concurrent_queue_iterator_base"></a>
+typedef <a class="el" href="a00208.html">concurrent_queue_iterator_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_queue_iterator_base</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a4">reduction_context</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::concurrent_vector_base"></a>
+typedef <a class="el" href="a00210.html">concurrent_vector_base_v3</a> </td><td class="memItemRight" valign="bottom"><b>concurrent_vector_base</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">0 if root, 1 if a left child, 2 if a right child. <a href="#a4"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::Token"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a7">reduction_context</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">0 if root, 1 if a left child, 2 if a right child. <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::Token"></a>
typedef unsigned long </td><td class="memItemRight" valign="bottom"><b>Token</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="tbb::internal::tokendiff_t"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="tbb::internal::tokendiff_t"></a>
typedef long </td><td class="memItemRight" valign="bottom"><b>tokendiff_t</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00279.html#a14">intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a11">reference_count</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="a00319.html#a22">intptr</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a10">reference_count</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A reference count. <a href="#a11"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::affinity_id"></a>
-typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a12">affinity_id</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A reference count. <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a11" doxytag="tbb::internal::affinity_id"></a>
+typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a11">affinity_id</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">An id as used for specifying affinity. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a13">uintptr</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a13" doxytag="tbb::internal::int8_t"></a>
+typedef __int8 </td><td class="memItemRight" valign="bottom"><b>int8_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a14" doxytag="tbb::internal::int16_t"></a>
+typedef __int16 </td><td class="memItemRight" valign="bottom"><b>int16_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::internal::int32_t"></a>
+typedef __int32 </td><td class="memItemRight" valign="bottom"><b>int32_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::internal::int64_t"></a>
+typedef __int64 </td><td class="memItemRight" valign="bottom"><b>int64_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::internal::uint8_t"></a>
+typedef unsigned __int8 </td><td class="memItemRight" valign="bottom"><b>uint8_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a18" doxytag="tbb::internal::uint16_t"></a>
+typedef unsigned __int16 </td><td class="memItemRight" valign="bottom"><b>uint16_t</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An unsigned integral type big enough to hold a pointer. <a href="#a13"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a14">intptr</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a19" doxytag="tbb::internal::uint32_t"></a>
+typedef unsigned __int32 </td><td class="memItemRight" valign="bottom"><b>uint32_t</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A signed integral type big enough to hold a pointer. <a href="#a14"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a15" doxytag="tbb::internal::version_tag"></a>
-typedef <a class="el" href="a00239.html">version_tag_v3</a> </td><td class="memItemRight" valign="bottom"><b>version_tag</b></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a20" doxytag="tbb::internal::uint64_t"></a>
+typedef unsigned __int64 </td><td class="memItemRight" valign="bottom"><b>uint64_t</b></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a21">uintptr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An unsigned integral type big enough to hold a pointer. <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::ptrdiff_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a22">intptr</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A signed integral type big enough to hold a pointer. <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a23" doxytag="tbb::internal::version_tag"></a>
+typedef <a class="el" href="a00275.html">version_tag_v3</a> </td><td class="memItemRight" valign="bottom"><b>version_tag</b></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a16" doxytag="tbb::internal::NFS_GetLineSize"></a>
-size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a16">NFS_GetLineSize</a> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a24" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+ </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (1, __TBB_full_fence) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a25" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+__TBB_full_fence </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (4, __TBB_full_fence) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a26" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+__TBB_full_fence __TBB_full_fence </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (1, acquire) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a27" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+__TBB_full_fence __TBB_full_fence <br>
+acquire </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (4, acquire) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a28" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+__TBB_full_fence __TBB_full_fence <br>
+acquire acquire </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (1, release) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a29" doxytag="tbb::internal::__TBB_DECL_FENCED_ATOMIC_PRIMITIVES"></a>
+__TBB_full_fence __TBB_full_fence <br>
+acquire acquire release </td><td class="memItemRight" valign="bottom"><b>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES</b> (4, release) __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">__TBB_full_fence __TBB_full_fence <br>
+acquire acquire release release </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a30">__TBB_DECL_ATOMIC_PRIMITIVES</a> (1) __TBB_DECL_ATOMIC_PRIMITIVES(2) __TBB_DECL_ATOMIC_PRIMITIVES(4) __TBB_DECL_ATOMIC_PRIMITIVES(8) template< typename I</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Base class that provides basic functionality for atomic<T>. <a href="#a30"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a31" doxytag="tbb::internal::NFS_GetLineSize"></a>
+size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a31">NFS_GetLineSize</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Cache/sector line size. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a17" doxytag="tbb::internal::NFS_Allocate"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a17">NFS_Allocate</a> (size_t n_element, size_t element_size, void *hint)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a32" doxytag="tbb::internal::NFS_Allocate"></a>
+void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a32">NFS_Allocate</a> (size_t n_element, size_t element_size, void *hint)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate memory on cache/sector line boundary. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a18">NFS_Free</a> (void *)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a33">NFS_Free</a> (void *)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Free memory allocated by NFS_Allocate. <a href="#a18"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a19" doxytag="tbb::internal::operator=="></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Free memory allocated by NFS_Allocate. <a href="#a33"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a34" doxytag="tbb::internal::operator=="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00223.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a20" doxytag="tbb::internal::operator!="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a35" doxytag="tbb::internal::operator!="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00196.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00223.html">hash_map_iterator</a>< Container, T > &i, const <a class="el" href="a00223.html">hash_map_iterator</a>< Container, U > &j)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a36" doxytag="tbb::internal::hasher"></a>
+template<typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00319.html#a2">hashcode_t</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00319.html#a36">hasher</a> (const T &t)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a21" doxytag="tbb::internal::operator=="></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Hasher functions. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a37" doxytag="tbb::internal::hasher"></a>
+template<typename P> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00319.html#a2">hashcode_t</a> </td><td class="memTemplItemRight" valign="bottom"><b>hasher</b> (P *ptr)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a38" doxytag="tbb::internal::hasher"></a>
+template<typename E, typename S, typename A> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00319.html#a2">hashcode_t</a> </td><td class="memTemplItemRight" valign="bottom"><b>hasher</b> (const std::basic_string< E, S, A > &s)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a39" doxytag="tbb::internal::hasher"></a>
+template<typename F, typename S> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00319.html#a2">hashcode_t</a> </td><td class="memTemplItemRight" valign="bottom"><b>hasher</b> (const std::pair< F, S > &p)</td></tr>
+
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a40" doxytag="tbb::internal::operator=="></a>
template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a22" doxytag="tbb::internal::operator!="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a41" doxytag="tbb::internal::operator!="></a>
template<typename C, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00180.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, T > &i, const <a class="el" href="a00207.html">concurrent_queue_iterator</a>< C, U > &j)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a42" doxytag="tbb::internal::itt_load_pointer_v3"></a>
+void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a42">itt_load_pointer_v3</a> (const void *src)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a23" doxytag="tbb::internal::operator+"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Routine that loads pointer from location pointed to by src without any fence, without causing ITT to report a race. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a43" doxytag="tbb::internal::operator+"></a>
template<typename Container, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00238.html">vector_iterator</a>< Container,<br>
- T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &v)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top"><a class="el" href="a00274.html">vector_iterator</a>< Container,<br>
+ T > </td><td class="memTemplItemRight" valign="bottom"><b>operator+</b> (ptrdiff_t offset, const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &v)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a24" doxytag="tbb::internal::operator=="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a44" doxytag="tbb::internal::operator=="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a25" doxytag="tbb::internal::operator!="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a45" doxytag="tbb::internal::operator!="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator!=</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a26" doxytag="tbb::internal::operator<"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a46" doxytag="tbb::internal::operator<"></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a27" doxytag="tbb::internal::operator>"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a47" doxytag="tbb::internal::operator>"></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator></b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a28" doxytag="tbb::internal::operator>="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a48" doxytag="tbb::internal::operator>="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator>=</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a29" doxytag="tbb::internal::operator<="></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a49" doxytag="tbb::internal::operator<="></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><b>operator<=</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a30" doxytag="tbb::internal::operator-"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a50" doxytag="tbb::internal::operator-"></a>
template<typename Container, typename T, typename U> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00238.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00238.html">vector_iterator</a>< Container, U > &j)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">ptrdiff_t </td><td class="memTemplItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="a00274.html">vector_iterator</a>< Container, T > &i, const <a class="el" href="a00274.html">vector_iterator</a>< Container, U > &j)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a31" doxytag="tbb::internal::handle_perror"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a51" doxytag="tbb::internal::handle_perror"></a>
void </td><td class="memItemRight" valign="bottom"><b>handle_perror</b> (int error_code, const char *what)</td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga0">run_parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga0">run_parallel_do</a> (Iterator first, Iterator last, const Body &body#if __TBB_EXCEPTIONS, <a class="el" href="a00262.html">task_group_context</a> &context#endif)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga0"></a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00321.html#ga0"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga1">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item) const )</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga1">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item) const #if __TBB_EXCEPTIONS, <a class="el" href="a00262.html">task_group_context</a> &context#endif)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga1"></a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00321.html#ga1"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item, typename _Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga2">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item, <a class="el" href="a00201.html">parallel_do_feeder</a>< _Item > &) const )</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga2">select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item, <a class="el" href="a00231.html">parallel_do_feeder</a>< _Item > &) const #if __TBB_EXCEPTIONS, <a class="el" href="a00262.html">task_group_context</a> &context#endif)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00281.html#ga2"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a35" doxytag="tbb::internal::itt_store_pointer_with_release_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a35">itt_store_pointer_with_release_v3</a> (void *dst, void *src)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00321.html#ga2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a55" doxytag="tbb::internal::itt_store_pointer_with_release_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a55">itt_store_pointer_with_release_v3</a> (void *dst, void *src)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">ITT instrumented routine that stores src into location pointed to by dst. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a36" doxytag="tbb::internal::itt_load_pointer_with_acquire_v3"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a36">itt_load_pointer_with_acquire_v3</a> (const void *src)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a56" doxytag="tbb::internal::itt_load_pointer_with_acquire_v3"></a>
+void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a56">itt_load_pointer_with_acquire_v3</a> (const void *src)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">ITT instrumented routine that loads pointer from location pointed to by src. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a37" doxytag="tbb::internal::parallel_reduce_store_body"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a57" doxytag="tbb::internal::parallel_reduce_store_body"></a>
template<typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>parallel_reduce_store_body</b> (T *&dst, T *src)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a38" doxytag="tbb::internal::parallel_reduce_load_body"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a58" doxytag="tbb::internal::parallel_reduce_load_body"></a>
template<typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T * </td><td class="memTemplItemRight" valign="bottom"><b>parallel_reduce_load_body</b> (T *&src)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga12" doxytag="tbb::internal::parallel_quick_sort"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga25" doxytag="tbb::internal::parallel_quick_sort"></a>
template<typename RandomAccessIterator, typename Compare> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga12">parallel_quick_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga25">parallel_quick_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper method to initiate the sort by calling parallel_for. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a40" doxytag="tbb::internal::get_initial_auto_partitioner_divisor"></a>
-size_t </td><td class="memItemRight" valign="bottom"><b>get_initial_auto_partitioner_divisor</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a60" doxytag="tbb::internal::get_initial_auto_partitioner_divisor"></a>
+size_t __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>get_initial_auto_partitioner_divisor</b> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a41">deallocate_via_handler_v3</a> (void *p)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a61">deallocate_via_handler_v3</a> (void *p)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocates memory using FreeHandler. <a href="#a41"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a42">allocate_via_handler_v3</a> (size_t n)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocates memory using FreeHandler. <a href="#a61"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a62">allocate_via_handler_v3</a> (size_t n)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocates memory using MallocHandler. <a href="#a42"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a43" doxytag="tbb::internal::is_malloc_used_v3"></a>
-bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a43">is_malloc_used_v3</a> ()</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocates memory using MallocHandler. <a href="#a62"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a63" doxytag="tbb::internal::is_malloc_used_v3"></a>
+bool __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a63">is_malloc_used_v3</a> ()</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns true if standard malloc/free are used to work with memory. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a44" doxytag="tbb::internal::__TBB_MaskedCompareAndSwap"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a64" doxytag="tbb::internal::__TBB_MaskedCompareAndSwap"></a>
template<size_t S, typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">intptr_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_MaskedCompareAndSwap</b> (volatile int32_t *ptr, T value, T comparand)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_MaskedCompareAndSwap</b> (volatile T *ptr, T value, T comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a45" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a65" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric"></a>
template<size_t S, typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric</b> (volatile void *ptr, T value, T comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a46" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 1, uint8_t >"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a66" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 1, uint8_t >"></a>
template<> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint8_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 1, uint8_t ></b> (volatile void *ptr, uint8_t value, uint8_t comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a47" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 2, uint16_t >"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a67" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 2, uint16_t >"></a>
template<> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint16_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 2, uint16_t ></b> (volatile void *ptr, uint16_t value, uint16_t comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a48" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 4, uint32_t >"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a68" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 4, uint32_t >"></a>
template<> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint32_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 4, uint32_t ></b> (volatile void *ptr, uint32_t value, uint32_t comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a49" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 8, uint64_t >"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a69" doxytag="tbb::internal::__TBB_CompareAndSwapGeneric< 8, uint64_t >"></a>
template<> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">uint64_t </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_CompareAndSwapGeneric< 8, uint64_t ></b> (volatile void *ptr, uint64_t value, uint64_t comparand)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a50" doxytag="tbb::internal::__TBB_FetchAndAddGeneric"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a70" doxytag="tbb::internal::__TBB_FetchAndAddGeneric"></a>
template<size_t S, typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_FetchAndAddGeneric</b> (volatile void *ptr, T addend)</td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a51" doxytag="tbb::internal::__TBB_FetchAndStoreGeneric"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a71" doxytag="tbb::internal::__TBB_FetchAndStoreGeneric"></a>
template<size_t S, typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">T </td><td class="memTemplItemRight" valign="bottom"><b>__TBB_FetchAndStoreGeneric</b> (volatile void *ptr, T value)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a52" doxytag="tbb::internal::runtime_warning"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a52">runtime_warning</a> (const char *format,...)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a72" doxytag="tbb::internal::__declspec"></a>
+ </td><td class="memItemRight" valign="bottom"><b>__declspec</b> (align(16)) struct __TBB_machine_type_with_strictest_alignment</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a73" doxytag="tbb::internal::itt_set_sync_name_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>itt_set_sync_name_v3</b> (void *obj, const wchar_t *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a74" doxytag="tbb::internal::multibyte_to_widechar"></a>
+size_t </td><td class="memItemRight" valign="bottom"><b>multibyte_to_widechar</b> (wchar_t *wcs, const char *mbs, size_t bufsize)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a75" doxytag="tbb::internal::itt_set_sync_name_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>itt_set_sync_name_v3</b> (void *obj, const char *name)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a76" doxytag="tbb::internal::runtime_warning"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a76">runtime_warning</a> (const char *format,...)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Report a runtime warning. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a53" doxytag="tbb::internal::poison_pointer"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a77" doxytag="tbb::internal::poison_pointer"></a>
+template<typename T> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00319.html#a77">poison_pointer</a> (T *&p)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Set p to invalid pointer value. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="a78" doxytag="tbb::internal::poison_pointer"></a>
template<typename T> </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><b>poison_pointer</b> (T *)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a54" doxytag="tbb::internal::allocate_closure_v3"></a>
-void * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a54">allocate_closure_v3</a> (size_t size)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a79" doxytag="tbb::internal::allocate_closure_v3"></a>
+void *__TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a79">allocate_closure_v3</a> (size_t size)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a closure. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a55" doxytag="tbb::internal::free_closure_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a55">free_closure_v3</a> (void *)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a80" doxytag="tbb::internal::free_closure_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a80">free_closure_v3</a> (void *)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Free a closure allocated by allocate_closure_v3. <br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a56" doxytag="tbb::internal::move_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00234.html">tbb_thread_v3</a> &t1, <a class="el" href="a00234.html">tbb_thread_v3</a> &t2)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a81" doxytag="tbb::internal::move_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>move_v3</b> (<a class="el" href="a00270.html">tbb_thread_v3</a> &t1, <a class="el" href="a00270.html">tbb_thread_v3</a> &t2)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a57" doxytag="tbb::internal::thread_get_id_v3"></a>
-tbb_thread_v3::id </td><td class="memItemRight" valign="bottom"><b>thread_get_id_v3</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a82" doxytag="tbb::internal::thread_get_id_v3"></a>
+tbb_thread_v3::id __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>thread_get_id_v3</b> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a58" doxytag="tbb::internal::thread_yield_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>thread_yield_v3</b> ()</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a83" doxytag="tbb::internal::thread_yield_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>thread_yield_v3</b> ()</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a59" doxytag="tbb::internal::thread_sleep_v3"></a>
-void </td><td class="memItemRight" valign="bottom"><b>thread_sleep_v3</b> (const <a class="el" href="a00237.html">tick_count::interval_t</a> &i)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a84" doxytag="tbb::internal::thread_sleep_v3"></a>
+void __TBB_EXPORTED_FUNC </td><td class="memItemRight" valign="bottom"><b>thread_sleep_v3</b> (const <a class="el" href="a00273.html">tick_count::interval_t</a> &i)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a60" doxytag="tbb::internal::operator=="></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a85" doxytag="tbb::internal::operator=="></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a61" doxytag="tbb::internal::operator!="></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a86" doxytag="tbb::internal::operator!="></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator!=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a62" doxytag="tbb::internal::operator<"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a87" doxytag="tbb::internal::operator<"></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator<</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a63" doxytag="tbb::internal::operator<="></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a88" doxytag="tbb::internal::operator<="></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator<=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a64" doxytag="tbb::internal::operator>"></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a89" doxytag="tbb::internal::operator>"></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator></b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a65" doxytag="tbb::internal::operator>="></a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a90" doxytag="tbb::internal::operator>="></a>
bool </td><td class="memItemRight" valign="bottom"><b>operator>=</b> (tbb_thread_v3::id x, tbb_thread_v3::id y)</td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00279.html#a0">NFS_MaxLineSize</a> = 128</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="tbb::internal::D"></a>
+__TBB_full_fence __TBB_full_fence <br>
+acquire acquire release release </td><td class="memItemRight" valign="bottom"><b>D</b></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Compile-time constant that is upper bound on cache line/sector size. <a href="#a0"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5" doxytag="tbb::internal::IS_SERIAL"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>IS_SERIAL</b> = 0x1</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a1">NFS_MaxLineSize</a> = 128</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6" doxytag="tbb::internal::SERIAL_MODE_MASK"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>SERIAL_MODE_MASK</b> = 0x1</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compile-time constant that is upper bound on cache line/sector size. <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="tbb::internal::hash_multiplier"></a>
+const <a class="el" href="a00319.html#a2">hashcode_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00319.html#a3">hash_multiplier</a> = sizeof(<a class="el" href="a00319.html#a2">hashcode_t</a>)==4? 2654435769U : 11400714819323198485ULL</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7" doxytag="tbb::internal::VERSION_MASK"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>VERSION_MASK</b> = 0x7<<1</td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8" doxytag="tbb::internal::CURRENT_VERSION"></a>
-const unsigned char </td><td class="memItemRight" valign="bottom"><b>CURRENT_VERSION</b> = __TBB_PIPELINE_VERSION(3)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Hash multiplier. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a12" doxytag="tbb::internal::aligned"></a>
+tbb::internal::__TBB_machine_type_with_strictest_alignment </td><td class="memItemRight" valign="bottom"><b>aligned</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
@@ -440,13 +554,13 @@ INTERNAL
INTERNAL
<p>
<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a14" doxytag="tbb::internal::intptr"></a><p>
+<a class="anchor" name="a22" doxytag="tbb::internal::intptr"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef std::ptrdiff_t <a class="el" href="a00279.html#a14">tbb::internal::intptr</a> </td>
+ <td class="md" nowrap valign="top">typedef std::ptrdiff_t <a class="el" href="a00319.html#a22">tbb::internal::intptr</a> </td>
</tr>
</table>
</td>
@@ -465,13 +579,13 @@ A signed integral type big enough to hold a pointer.
There's no guarantee by the C++ standard that a ptrdiff_t is really big enough, but it happens to be for all platforms of interest. </td>
</tr>
</table>
-<a class="anchor" name="a4" doxytag="tbb::internal::reduction_context"></a><p>
+<a class="anchor" name="a7" doxytag="tbb::internal::reduction_context"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef char <a class="el" href="a00279.html#a4">tbb::internal::reduction_context</a> </td>
+ <td class="md" nowrap valign="top">typedef char <a class="el" href="a00319.html#a7">tbb::internal::reduction_context</a> </td>
</tr>
</table>
</td>
@@ -490,13 +604,13 @@ There's no guarantee by the C++ standard that a ptrdiff_t is really big enough,
Represented as a char, not enum, for compactness. </td>
</tr>
</table>
-<a class="anchor" name="a11" doxytag="tbb::internal::reference_count"></a><p>
+<a class="anchor" name="a10" doxytag="tbb::internal::reference_count"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef <a class="el" href="a00279.html#a14">intptr</a> <a class="el" href="a00279.html#a11">tbb::internal::reference_count</a> </td>
+ <td class="md" nowrap valign="top">typedef <a class="el" href="a00319.html#a22">intptr</a> <a class="el" href="a00319.html#a10">tbb::internal::reference_count</a> </td>
</tr>
</table>
</td>
@@ -515,13 +629,13 @@ A reference count.
Should always be non-negative. A signed type is used so that underflow can be detected. </td>
</tr>
</table>
-<a class="anchor" name="a13" doxytag="tbb::internal::uintptr"></a><p>
+<a class="anchor" name="a21" doxytag="tbb::internal::uintptr"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">typedef size_t <a class="el" href="a00279.html#a13">tbb::internal::uintptr</a> </td>
+ <td class="md" nowrap valign="top">typedef size_t <a class="el" href="a00319.html#a21">tbb::internal::uintptr</a> </td>
</tr>
</table>
</td>
@@ -541,13 +655,43 @@ There's no guarantee by the C++ standard that a size_t is really big enough, but
</tr>
</table>
<hr><h2>Function Documentation</h2>
-<a class="anchor" name="a42" doxytag="tbb::internal::allocate_via_handler_v3"></a><p>
+<a class="anchor" name="a30" doxytag="tbb::internal::__TBB_DECL_ATOMIC_PRIMITIVES"></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top">__TBB_full_fence __TBB_full_fence acquire acquire release release __TBB_DECL_ATOMIC_PRIMITIVES </td>
+ <td class="md" valign="top">( </td>
+ <td class="md" nowrap valign="top">1 </td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top"> ) </td>
+ <td class="md" nowrap></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+ <tr>
+ <td>
+
+ </td>
+ <td>
+
+<p>
+Base class that provides basic functionality for atomic<T>.
+<p>
+I is the underlying type. D is the difference type. StepType should be char if I is an integral type, and T if I is a T*. </td>
+ </tr>
+</table>
+<a class="anchor" name="a62" doxytag="tbb::internal::allocate_via_handler_v3"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void* allocate_via_handler_v3 </td>
+ <td class="md" nowrap valign="top">void* __TBB_EXPORTED_FUNC allocate_via_handler_v3 </td>
<td class="md" valign="top">( </td>
<td class="md" nowrap valign="top">size_t </td>
<td class="mdname1" valign="top" nowrap> <em>n</em> </td>
@@ -571,13 +715,13 @@ Allocates memory using MallocHandler.
The function uses scalable_malloc if scalable allocator is available and malloc if not </td>
</tr>
</table>
-<a class="anchor" name="a41" doxytag="tbb::internal::deallocate_via_handler_v3"></a><p>
+<a class="anchor" name="a61" doxytag="tbb::internal::deallocate_via_handler_v3"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void deallocate_via_handler_v3 </td>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_FUNC deallocate_via_handler_v3 </td>
<td class="md" valign="top">( </td>
<td class="md" nowrap valign="top">void * </td>
<td class="mdname1" valign="top" nowrap> <em>p</em> </td>
@@ -601,13 +745,13 @@ Deallocates memory using FreeHandler.
The function uses scalable_free if scalable allocator is available and free if not </td>
</tr>
</table>
-<a class="anchor" name="a18" doxytag="tbb::internal::NFS_Free"></a><p>
+<a class="anchor" name="a33" doxytag="tbb::internal::NFS_Free"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">void NFS_Free </td>
+ <td class="md" nowrap valign="top">void __TBB_EXPORTED_FUNC NFS_Free </td>
<td class="md" valign="top">( </td>
<td class="md" nowrap valign="top">void * </td>
<td class="mdname1" valign="top" nowrap> </td>
@@ -632,13 +776,13 @@ Freeing a NULL pointer is allowed, but has no effect. </td>
</tr>
</table>
<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a0" doxytag="tbb::internal::NFS_MaxLineSize"></a><p>
+<a class="anchor" name="a1" doxytag="tbb::internal::NFS_MaxLineSize"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
- <td class="md" nowrap valign="top">const size_t <a class="el" href="a00279.html#a0">tbb::internal::NFS_MaxLineSize</a> = 128 </td>
+ <td class="md" nowrap valign="top">const size_t <a class="el" href="a00319.html#a1">tbb::internal::NFS_MaxLineSize</a> = 128 </td>
</tr>
</table>
</td>
@@ -659,7 +803,7 @@ It should be used only in situations where having a compile-time upper bound is
</table>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00281.html b/doc/html/a00321.html
similarity index 56%
rename from doc/html/a00281.html
rename to doc/html/a00321.html
index cc74550..d9e9f13 100644
--- a/doc/html/a00281.html
+++ b/doc/html/a00321.html
@@ -4,191 +4,262 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>Algorithms</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate. <a href="a00169.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A range over which to iterate. <a href="a00195.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept. <a href="a00170.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 2-dimensional range that models the Range concept. <a href="a00196.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept. <a href="a00171.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A 3-dimensional range that models the Range concept. <a href="a00197.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00203.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00233.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00186.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00213.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00202.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00232.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00185.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00212.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00187.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00214.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used in parallel_for. <a href="a00222.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used in parallel_for. <a href="a00255.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce. <a href="a00192.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce. <a href="a00219.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce. <a href="a00223.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce. <a href="a00256.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00193.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>. <a href="a00220.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a>. <a href="a00224.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html">tbb::pre_scan_tag</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Task type used to split the work of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a>. <a href="a00257.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed. <a href="a00207.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html">tbb::final_scan_tag</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary class for parallel_reduce; for internal use only. <a href="a00225.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">tbb::pre_scan_tag</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed. <a href="a00190.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the initial scan is being performed. <a href="a00237.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">tbb::final_scan_tag</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs final scan for a leaf. <a href="a00191.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Used to indicate that the final scan is being performed. <a href="a00217.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split work to be done in the scan. <a href="a00227.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Performs final scan for a leaf. <a href="a00218.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Combine partial results. <a href="a00194.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Split work to be done in the scan. <a href="a00260.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial task to split the work. <a href="a00225.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Combine partial results. <a href="a00221.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Range used in quicksort to split elements into subranges based on a value. <a href="a00213.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Initial task to split the work. <a href="a00258.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to sort elements in a range that is smaller than the grainsize. <a href="a00212.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Range used in quicksort to split elements into subranges based on a value. <a href="a00244.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00241.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to test if elements in a range are presorted. <a href="a00243.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00240.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Body class used to sort elements in a range that is smaller than the grainsize. <a href="a00242.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00242.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00277.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work. <a href="a00204.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html">tbb::simple_partitioner</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00276.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner <a href="a00216.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html">tbb::auto_partitioner</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="a00278.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner. <a href="a00167.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">tbb::filter</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a stream, with optional addition of more work. <a href="a00234.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00249.html">tbb::simple_partitioner</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline. <a href="a00189.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html">tbb::pipeline</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A simple partitioner <a href="a00249.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">tbb::auto_partitioner</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items. <a href="a00206.html#_details">More...</a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">tbb::split</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">An auto partitioner. <a href="a00193.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html">tbb::filter</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor. <a href="a00221.html#_details">More...</a><br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A stage in a pipeline. <a href="a00216.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">tbb::pipeline</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A processing pipeling that applies filters to items. <a href="a00236.html#_details">More...</a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html">tbb::split</a></td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Dummy type that distinguishes splitting constructor from copy constructor. <a href="a00254.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>parallel_do</h2></td></tr>
<tr><td colspan="2">See also requirements on <a class="el" href="parallel_do_body_req.html">parallel_do Body</a>. * <br><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga3" doxytag="algorithms::parallel_do"></a>
template<typename Iterator, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga3">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga3">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga4" doxytag="algorithms::parallel_do"></a>
+template<typename Iterator, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga4">tbb::parallel_do</a> (Iterator first, Iterator last, const Body &body, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over a range, with optional addition of more work and user-supplied context. <br></td></tr>
<tr><td colspan="2"><br><h2>parallel_for</h2></td></tr>
<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_for_body_req.html">parallel_for Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga4" doxytag="algorithms::parallel_for"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga5" doxytag="algorithms::parallel_for"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga4">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga5">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner, or default partitioner if no partitioner is specified. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga5" doxytag="algorithms::parallel_for"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga6" doxytag="algorithms::parallel_for"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga5">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga6">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga6" doxytag="algorithms::parallel_for"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7" doxytag="algorithms::parallel_for"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga6">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga7">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00162.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga8" doxytag="algorithms::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga8">tbb::parallel_for</a> (const Range &range, const Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga9" doxytag="algorithms::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga9">tbb::parallel_for</a> (const Range &range, const Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga10" doxytag="algorithms::parallel_for"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga10">tbb::parallel_for</a> (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration over range with <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
<tr><td colspan="2"><br><h2>parallel_reduce</h2></td></tr>
<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_reduce_body_req.html">parallel_reduce Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga7" doxytag="algorithms::parallel_reduce"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga11" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga11">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.html">simple_partitioner</a>, or no partitioner specified. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga12" doxytag="algorithms::parallel_reduce"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga7">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga12">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00216.html">simple_partitioner</a>, or default partitioner if no partitioner is specified. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga8" doxytag="algorithms::parallel_reduce"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga13" doxytag="algorithms::parallel_reduce"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga8">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga13">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga9" doxytag="algorithms::parallel_reduce"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga14" doxytag="algorithms::parallel_reduce"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga9">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga14">tbb::parallel_reduce</a> (const Range &range, Body &body, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga15" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga15">tbb::parallel_reduce</a> (const Range &range, Body &body, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga16" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Body> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga16">tbb::parallel_reduce</a> (const Range &range, Body &body, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga17" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga17">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00249.html">simple_partitioner</a>, or no partitioner specified. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga18" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga18">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga19" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga19">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction and <a class="el" href="a00188.html">affinity_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga20" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga20">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const simple_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, simple partitioner and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga21" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga21">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, const auto_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00193.html">auto_partitioner</a> and user-supplied context. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga22" doxytag="algorithms::parallel_reduce"></a>
+template<typename Range, typename Value, typename RealBody, typename Reduction> </td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">Value </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga22">tbb::parallel_reduce</a> (const Range &range, const Value &identity, const RealBody &real_body, const Reduction &reduction, affinity_partitioner &partitioner, task_group_context &context)</td></tr>
+
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel iteration with reduction, <a class="el" href="a00188.html">affinity_partitioner</a> and user-supplied context. <br></td></tr>
<tr><td colspan="2"><br><h2>parallel_scan</h2></td></tr>
<tr><td colspan="2">See also requirements on <a class="el" href="range_req.html">Range</a> and <a class="el" href="parallel_scan_body_req.html">parallel_scan Body</a>. * <br><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga10" doxytag="algorithms::parallel_scan"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga23" doxytag="algorithms::parallel_scan"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga10">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga23">tbb::parallel_scan</a> (const Range &range, Body &body, const simple_partitioner &partitioner=simple_partitioner())</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00216.html">simple_partitioner</a>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga11" doxytag="algorithms::parallel_scan"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00249.html">simple_partitioner</a>. <br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga24" doxytag="algorithms::parallel_scan"></a>
template<typename Range, typename Body> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga11">tbb::parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga24">tbb::parallel_scan</a> (const Range &range, Body &body, const auto_partitioner &partitioner)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00167.html">auto_partitioner</a>. <br></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Parallel prefix with <a class="el" href="a00193.html">auto_partitioner</a>. <br></td></tr>
<tr><td colspan="2"><br><h2>parallel_sort</h2></td></tr>
<tr><td colspan="2">See also requirements on <a class="el" href="parallel_sort_iter_req.html">iterators for parallel_sort</a>. * <br><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename RandomAccessIterator, typename Compare> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga13">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga26">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator. <a href="#ga13"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga14" doxytag="algorithms::parallel_sort"></a>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) using the given comparator. <a href="#ga26"></a><br></td></tr>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga27" doxytag="algorithms::parallel_sort"></a>
template<typename RandomAccessIterator> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga14">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga27">tbb::parallel_sort</a> (RandomAccessIterator begin, RandomAccessIterator end)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in [begin,end) with a default comparator <code>std::less<RandomAccessIterator></code>. <br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga15" doxytag="algorithms::parallel_sort"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga28" doxytag="algorithms::parallel_sort"></a>
template<typename T> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga15">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga28">tbb::parallel_sort</a> (T *begin, T *end)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Sorts the data in the range <code></code>[begin,end) with a default comparator <code>std::less<T></code>. <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga0">tbb::internal::run_parallel_do</a> (Iterator first, Iterator last, const Body &body)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga0">tbb::internal::run_parallel_do</a> (Iterator first, Iterator last, const Body &body#if __TBB_EXCEPTIONS, task_group_context &context#endif)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="#ga0"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga1">tbb::internal::select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item) const )</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga1">tbb::internal::select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item) const #if __TBB_EXCEPTIONS, task_group_context &context#endif)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="#ga1"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template<typename Iterator, typename Body, typename Item, typename _Item> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga2">tbb::internal::select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item, parallel_do_feeder< _Item > &) const )</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga2">tbb::internal::select_parallel_do</a> (Iterator first, Iterator last, const Body &body, void(Body::*)(Item, parallel_do_feeder< _Item > &) const #if __TBB_EXCEPTIONS, task_group_context &context#endif)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">For internal use only. <a href="#ga2"></a><br></td></tr>
-<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga12" doxytag="algorithms::parallel_quick_sort"></a>
+<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="ga25" doxytag="algorithms::parallel_quick_sort"></a>
template<typename RandomAccessIterator, typename Compare> </td></tr>
-<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00281.html#ga12">tbb::internal::parallel_quick_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
+<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00321.html#ga25">tbb::internal::parallel_quick_sort</a> (RandomAccessIterator begin, RandomAccessIterator end, const Compare &comp)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Wrapper method to initiate the sort by calling parallel_for. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
containers Containers memory_allocation Memory Allocation synchronization Synchronization timing Timing task_scheduling Task Scheduling <hr><h2>Function Documentation</h2>
-<a class="anchor" name="ga13" doxytag="tbb::parallel_sort"></a><p>
+<a class="anchor" name="ga26" doxytag="tbb::parallel_sort"></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
@@ -261,8 +332,14 @@ template<typename Iterator, typename Body, typename Item> </td>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
- <td class="md" nowrap>const Body & </td>
- <td class="mdname" nowrap> <em>body</em></td>
+ <td class="md" nowrap>const Body &body#if </td>
+ <td class="mdname" nowrap> <em>__TBB_EXCEPTIONS</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>task_group_context &context# </td>
+ <td class="mdname" nowrap> <em>endif</em></td>
</tr>
<tr>
<td class="md"></td>
@@ -316,8 +393,14 @@ template<typename Iterator, typename Body, typename Item, typename _Item>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
- <td class="md" nowrap>void(Body::*)(Item, parallel_do_feeder< _Item > &) </td>
- <td class="mdname" nowrap> <em>const</em></td>
+ <td class="md" nowrap>void(Body::*)(Item, parallel_do_feeder< _Item > &) const #if </td>
+ <td class="mdname" nowrap> <em>__TBB_EXCEPTIONS</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>task_group_context &context# </td>
+ <td class="mdname" nowrap> <em>endif</em></td>
</tr>
<tr>
<td class="md"></td>
@@ -371,8 +454,14 @@ template<typename Iterator, typename Body, typename Item> </td>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
- <td class="md" nowrap>void(Body::*)(Item) </td>
- <td class="mdname" nowrap> <em>const</em></td>
+ <td class="md" nowrap>void(Body::*)(Item) const #if </td>
+ <td class="mdname" nowrap> <em>__TBB_EXCEPTIONS</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td class="md"></td>
+ <td class="md" nowrap>task_group_context &context# </td>
+ <td class="mdname" nowrap> <em>endif</em></td>
</tr>
<tr>
<td class="md"></td>
@@ -398,7 +487,7 @@ Detects types of Body's operator function arguments. </td>
</table>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00282.html b/doc/html/a00322.html
similarity index 92%
rename from doc/html/a00282.html
rename to doc/html/a00322.html
index 111a47a..d97cee3 100644
--- a/doc/html/a00282.html
+++ b/doc/html/a00322.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>_tbb_windef.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -51,20 +51,20 @@
00044 <span class="preprocessor">#define __TBB_STRING_AUX(x) #x</span>
00045 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_STRING(x) __TBB_STRING_AUX(x)</span>
00046 <span class="preprocessor"></span>
-00047 <span class="comment">// Default setting of TBB_DO_ASSERT</span>
-00048 <span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
-00049 <span class="preprocessor"></span><span class="preprocessor"># if TBB_DO_ASSERT </span>
+00047 <span class="comment">// Default setting of TBB_USE_DEBUG</span>
+00048 <span class="preprocessor">#ifdef TBB_USE_DEBUG</span>
+00049 <span class="preprocessor"></span><span class="preprocessor"># if TBB_USE_DEBUG </span>
00050 <span class="preprocessor"></span><span class="preprocessor"># if !defined(_DEBUG)</span>
-00051 <span class="preprocessor"></span><span class="preprocessor"># pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_DO_ASSERT!=0")</span>
+00051 <span class="preprocessor"></span><span class="preprocessor"># pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")</span>
00052 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
00053 <span class="preprocessor"></span><span class="preprocessor"># else</span>
00054 <span class="preprocessor"></span><span class="preprocessor"># if defined(_DEBUG)</span>
-00055 <span class="preprocessor"></span><span class="preprocessor"># pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_DO_ASSERT==0")</span>
+00055 <span class="preprocessor"></span><span class="preprocessor"># pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")</span>
00056 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
00057 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
00058 <span class="preprocessor"></span><span class="preprocessor">#else</span>
00059 <span class="preprocessor"></span><span class="preprocessor"># ifdef _DEBUG</span>
-00060 <span class="preprocessor"></span><span class="preprocessor"># define TBB_DO_ASSERT 1</span>
+00060 <span class="preprocessor"></span><span class="preprocessor"># define TBB_USE_DEBUG 1</span>
00061 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
00062 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
00063 <span class="preprocessor"></span>
@@ -83,7 +83,7 @@
00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00283.html b/doc/html/a00323.html
similarity index 86%
copy from doc/html/a00283.html
copy to doc/html/a00323.html
index 23b7f23..6d84a03 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00323.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>aligned_space.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -31,18 +31,18 @@
00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
00025 <span class="preprocessor">#include "tbb_machine.h"</span>
00026
-<a name="l00027"></a><a class="code" href="a00278.html">00027</a> <span class="keyword">namespace </span>tbb {
+<a name="l00027"></a><a class="code" href="a00318.html">00027</a> <span class="keyword">namespace </span>tbb {
00028
00030
00032 <span class="keyword">template</span><<span class="keyword">typename</span> T,size_t N>
-<a name="l00033"></a><a class="code" href="a00164.html">00033</a> <span class="keyword">class </span><a class="code" href="a00164.html">aligned_space</a> {
+<a name="l00033"></a><a class="code" href="a00190.html">00033</a> <span class="keyword">class </span><a class="code" href="a00190.html">aligned_space</a> {
00034 <span class="keyword">private</span>:
00035 <span class="keyword">typedef</span> __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
00036 element_type array[(<span class="keyword">sizeof</span>(T)*N+<span class="keyword">sizeof</span>(element_type)-1)/<span class="keyword">sizeof</span>(element_type)];
00037 <span class="keyword">public</span>:
-<a name="l00039"></a><a class="code" href="a00164.html#a0">00039</a> T* begin() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
+<a name="l00039"></a><a class="code" href="a00190.html#a0">00039</a> T* begin() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
00040
-<a name="l00042"></a><a class="code" href="a00164.html#a1">00042</a> T* end() {<span class="keywordflow">return</span> begin()+N;}
+<a name="l00042"></a><a class="code" href="a00190.html#a1">00042</a> T* end() {<span class="keywordflow">return</span> begin()+N;}
00043 };
00044
00045 } <span class="comment">// namespace tbb </span>
@@ -50,7 +50,7 @@
00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00284.html b/doc/html/a00324.html
similarity index 64%
rename from doc/html/a00284.html
rename to doc/html/a00324.html
index 1916f40..d799f3b 100644
--- a/doc/html/a00284.html
+++ b/doc/html/a00324.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>atomic.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -39,21 +39,21 @@
00032
00033 <span class="preprocessor">#include "tbb_machine.h"</span>
00034
-00035 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-00036 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
+00035 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+00036 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings </span>
00037 <span class="preprocessor"> #pragma warning (push)</span>
00038 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4244 4267)</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && _Wp64 */</span>
-00040
+00039 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00040 <span class="preprocessor"></span>
00041 <span class="keyword">namespace </span>tbb {
00042
-<a name="l00044"></a><a class="code" href="a00278.html#a37">00044</a> <span class="keyword">enum</span> <a class="code" href="a00278.html#a37">memory_semantics</a> {
+<a name="l00044"></a><a class="code" href="a00318.html#a57">00044</a> <span class="keyword">enum</span> <a class="code" href="a00318.html#a57">memory_semantics</a> {
00046 __TBB_full_fence,
00048 acquire,
-00050 <a class="code" href="a00278.html#a37a2">release</a>
+00050 <a class="code" href="a00318.html#a57a2">release</a>
00051 };
00052
-<a name="l00054"></a><a class="code" href="a00279.html">00054</a> <span class="keyword">namespace </span>internal {
+<a name="l00054"></a><a class="code" href="a00319.html">00054</a> <span class="keyword">namespace </span>internal {
00055
00056 <span class="keyword">template</span><size_t Size, memory_semantics M>
00057 <span class="keyword">struct </span>atomic_traits { <span class="comment">// Primary template</span>
@@ -61,7 +61,7 @@
00059
00060 <span class="keyword">template</span><size_t Size>
00061 <span class="keyword">struct </span>atomic_word { <span class="comment">// Primary template</span>
-00062 <span class="keyword">typedef</span> <a class="code" href="a00279.html#a14">intptr</a> word;
+00062 <span class="keyword">typedef</span> <a class="code" href="a00319.html#a22">intptr</a> word;
00063 };
00064
00065 <span class="keyword">template</span><<span class="keyword">typename</span> I> <span class="comment">// Primary template</span>
@@ -140,86 +140,83 @@
00138 <span class="preprocessor"> };</span>
00139 <span class="preprocessor"></span>
00140 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
-00141 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00278.html#a37a0">__TBB_full_fence</a>)
-00142 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00278.html#a37a0">__TBB_full_fence</a>)
-00143 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00278.html#a37a0">__TBB_full_fence</a>)
-00144 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00278.html#a37a0">__TBB_full_fence</a>)
-00145 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00278.html#a37a1">acquire</a>)
-00146 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00278.html#a37a1">acquire</a>)
-00147 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00278.html#a37a1">acquire</a>)
-00148 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00278.html#a37a1">acquire</a>)
-00149 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00278.html#a37a2">release</a>)
-00150 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00278.html#a37a2">release</a>)
-00151 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00278.html#a37a2">release</a>)
-00152 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00278.html#a37a2">release</a>)
+00141 <span class="preprocessor"></span>__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00318.html#a57a0">__TBB_full_fence</a>)
+00142 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00318.html#a57a0">__TBB_full_fence</a>)
+00143 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00318.html#a57a0">__TBB_full_fence</a>)
+00144 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00318.html#a57a0">__TBB_full_fence</a>)
+00145 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00318.html#a57a1">acquire</a>)
+00146 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00318.html#a57a1">acquire</a>)
+00147 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00318.html#a57a1">acquire</a>)
+00148 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00318.html#a57a1">acquire</a>)
+00149 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,<a class="code" href="a00318.html#a57a2">release</a>)
+00150 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,<a class="code" href="a00318.html#a57a2">release</a>)
+00151 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,<a class="code" href="a00318.html#a57a2">release</a>)
+00152 __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,<a class="code" href="a00318.html#a57a2">release</a>)
00153 #<span class="keywordflow">else</span>
-00154 __TBB_DECL_ATOMIC_PRIMITIVES(1)
-00155 __TBB_DECL_ATOMIC_PRIMITIVES(2)
-00156 __TBB_DECL_ATOMIC_PRIMITIVES(4)
-00157 __TBB_DECL_ATOMIC_PRIMITIVES(8)
+00154 <a class="code" href="a00319.html#a30">__TBB_DECL_ATOMIC_PRIMITIVES</a>(1)
+00155 <a class="code" href="a00319.html#a30">__TBB_DECL_ATOMIC_PRIMITIVES</a>(2)
+00156 <a class="code" href="a00319.html#a30">__TBB_DECL_ATOMIC_PRIMITIVES</a>(4)
+00157 <a class="code" href="a00319.html#a30">__TBB_DECL_ATOMIC_PRIMITIVES</a>(8)
00158 #endif
00159
00161
00163 <span class="preprocessor">#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))</span>
00164 <span class="preprocessor"></span>
-00165 <span class="keyword">template</span><<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, size_t Step>
-00166 <span class="keyword">struct </span>atomic_impl: <span class="keyword">private</span> atomic_base<I> {
-00167 <span class="keyword">private</span>:
-00168 <span class="keyword">typedef</span> <span class="keyword">typename</span> atomic_word<sizeof(I)>::word word;
-00169 <span class="keyword">public</span>:
-00170 <span class="keyword">typedef</span> I value_type;
-00171
-00172 <span class="keyword">template</span><memory_semantics M>
-00173 value_type fetch_and_add( D addend ) {
-00174 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_value, addend*Step ));
-00175 }
-00176
+00166
+00169 <span class="keyword">template</span><<span class="keyword">typename</span> I, <span class="keyword">typename</span> D, <span class="keyword">typename</span> StepType>
+00170 <span class="keyword">struct </span>atomic_impl: <span class="keyword">private</span> atomic_base<I> {
+00171 <span class="keyword">private</span>:
+00172 <span class="keyword">typedef</span> <span class="keyword">typename</span> atomic_word<sizeof(I)>::word word;
+00173 <span class="keyword">public</span>:
+00174 <span class="keyword">typedef</span> I value_type;
+00175
+00176 <span class="keyword">template</span><memory_semantics M>
00177 value_type fetch_and_add( D addend ) {
-00178 <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
+00178 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_value, addend*<span class="keyword">sizeof</span>(StepType) ));
00179 }
00180
-00181 <span class="keyword">template</span><memory_semantics M>
-00182 value_type fetch_and_increment() {
-00183 <span class="keywordflow">return</span> fetch_and_add<M>(1);
-00184 }
-00185
+00181 value_type fetch_and_add( D addend ) {
+00182 <span class="keywordflow">return</span> fetch_and_add<__TBB_full_fence>(addend);
+00183 }
+00184
+00185 <span class="keyword">template</span><memory_semantics M>
00186 value_type fetch_and_increment() {
-00187 <span class="keywordflow">return</span> fetch_and_add(1);
+00187 <span class="keywordflow">return</span> fetch_and_add<M>(1);
00188 }
00189
-00190 <span class="keyword">template</span><memory_semantics M>
-00191 value_type fetch_and_decrement() {
-00192 <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
-00193 }
-00194
+00190 value_type fetch_and_increment() {
+00191 <span class="keywordflow">return</span> fetch_and_add(1);
+00192 }
+00193
+00194 <span class="keyword">template</span><memory_semantics M>
00195 value_type fetch_and_decrement() {
-00196 <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+00196 <span class="keywordflow">return</span> fetch_and_add<M>(__TBB_MINUS_ONE(D));
00197 }
00198
-00199 <span class="keyword">template</span><memory_semantics M>
-00200 value_type fetch_and_store( value_type value ) {
-00201 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&this->my_value,word(value)));
-00202 }
-00203
+00199 value_type fetch_and_decrement() {
+00200 <span class="keywordflow">return</span> fetch_and_add(__TBB_MINUS_ONE(D));
+00201 }
+00202
+00203 <span class="keyword">template</span><memory_semantics M>
00204 value_type fetch_and_store( value_type value ) {
-00205 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+00205 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&this->my_value,word(value)));
00206 }
00207
-00208 <span class="keyword">template</span><memory_semantics M>
-00209 value_type compare_and_swap( value_type value, value_type comparand ) {
-00210 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&this->my_value,word(value),word(comparand)));
-00211 }
-00212
+00208 value_type fetch_and_store( value_type value ) {
+00209 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+00210 }
+00211
+00212 <span class="keyword">template</span><memory_semantics M>
00213 value_type compare_and_swap( value_type value, value_type comparand ) {
-00214 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
+00214 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&this->my_value,word(value),word(comparand)));
00215 }
00216
-00217 operator value_type()<span class="keyword"> const volatile </span>{ <span class="comment">// volatile qualifier here for backwards compatibility </span>
-00218 <span class="keywordflow">return</span> __TBB_load_with_acquire( this->my_value );
+00217 value_type compare_and_swap( value_type value, value_type comparand ) {
+00218 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
00219 }
00220
-00221 value_type& _internal_reference()<span class="keyword"> const </span>{
-00222 <span class="keywordflow">return</span> static_cast<value_type&>(this->my_value);
+00221 operator value_type()<span class="keyword"> const volatile </span>{ <span class="comment">// volatile qualifier here for backwards compatibility </span>
+00222 <span class="keywordflow">return</span> __TBB_load_with_acquire( this->my_value );
00223 }
00224
00225 <span class="keyword">protected</span>:
@@ -261,23 +258,23 @@
00261 <span class="preprocessor">#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400</span>
00262 <span class="preprocessor"></span>
00263 <span class="keyword">template</span><>
-00264 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::operator atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type()<span class="keyword"> const volatile </span>{
+00264 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::operator atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::value_type()<span class="keyword"> const volatile </span>{
00265 <span class="keywordflow">return</span> __TBB_Load8(&this->my_value);
00266 }
00267
00268 <span class="keyword">template</span><>
-00269 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::operator atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type()<span class="keyword"> const volatile </span>{
+00269 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::operator atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::value_type()<span class="keyword"> const volatile </span>{
00270 <span class="keywordflow">return</span> __TBB_Load8(&this->my_value);
00271 }
00272
00273 <span class="keyword">template</span><>
-00274 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+00274 <span class="keyword">inline</span> atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::value_type atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::store_with_release( value_type rhs ) {
00275 __TBB_Store8(&this->my_value,rhs);
00276 <span class="keywordflow">return</span> rhs;
00277 }
00278
00279 <span class="keyword">template</span><>
-00280 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+00280 <span class="keyword">inline</span> atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::value_type atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::store_with_release( value_type rhs ) {
00281 __TBB_Store8(&this->my_value,rhs);
00282 <span class="keywordflow">return</span> rhs;
00283 }
@@ -289,11 +286,11 @@
00290
00292
00294 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00295"></a><a class="code" href="a00165.html">00295</a> <span class="keyword">struct </span><a class="code" href="a00165.html">atomic</a> {
+<a name="l00295"></a><a class="code" href="a00191.html">00295</a> <span class="keyword">struct </span><a class="code" href="a00191.html">atomic</a> {
00296 };
00297
00298 <span class="preprocessor">#define __TBB_DECL_ATOMIC(T) \</span>
-00299 <span class="preprocessor"> template<> struct atomic<T>: internal::atomic_impl<T,T,1> { \</span>
+00299 <span class="preprocessor"> template<> struct atomic<T>: internal::atomic_impl<T,T,char> { \</span>
00300 <span class="preprocessor"> T operator=( T rhs ) {return store_with_release(rhs);} \</span>
00301 <span class="preprocessor"> atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;} \</span>
00302 <span class="preprocessor"> };</span>
@@ -304,123 +301,140 @@
00307 #else
00308 <span class="comment">// Some old versions of MVSC cannot correctly compile templates with "long long".</span>
00309 #endif <span class="comment">/* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */</span>
-00310 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
-00311 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
-00312 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)
-00313 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
-00314 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
-00315 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
-00316 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
-00317 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
-00318 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
-00319
-00320 #if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED)
-00321 __TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
-00322 #endif <span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
-00323
-00324 template<typename T> struct <a class="code" href="a00165.html">atomic</a><T*>: internal::atomic_impl<T*,ptrdiff_t,sizeof(T)> {
-00325 T* operator=( T* rhs ) {
-00326 <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
-00327 <span class="keywordflow">return</span> this->store_with_release(rhs);
-00328 }
-00329 atomic<T*>& operator=( <span class="keyword">const</span> atomic<T*> rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
-00330 T* operator->()<span class="keyword"> const </span>{
-00331 <span class="keywordflow">return</span> (*this);
-00332 }
-00333 };
-00334
-00335 <span class="keyword">template</span><>
-00336 <span class="keyword">struct </span>atomic<void*> {
-00337 <span class="keyword">private</span>:
-00338 <span class="keywordtype">void</span>* my_value;
-00339
-00340 <span class="keyword">public</span>:
-00341 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* value_type;
-00342
-00343 <span class="keyword">template</span><memory_semantics M>
-00344 value_type compare_and_swap( value_type value, value_type comparand ) {
-00345 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&my_value,internal::intptr(value),internal::intptr(comparand)));
+00310
+00311 __TBB_DECL_ATOMIC(<span class="keywordtype">long</span>)
+00312 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)
+00313
+00314 #if defined(_MSC_VER) && __TBB_WORDSIZE==4
+00315 <span class="comment">/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option. </span>
+00316 <span class="comment"> It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T) </span>
+00317 <span class="comment"> with an operator=(U) that explicitly converts the U to a T. Types T and U should be</span>
+00318 <span class="comment"> type synonyms on the platform. Type U should be the wider variant of T from the</span>
+00319 <span class="comment"> perspective of /Wp64. */</span>
+00320 #define __TBB_DECL_ATOMIC_ALT(T,U) \
+00321 template<> struct <a class="code" href="a00191.html">atomic</a><T>: internal::atomic_impl<T,T,<span class="keywordtype">char</span>> { \
+00322 T operator=( U rhs ) {<span class="keywordflow">return</span> store_with_release(T(rhs));} \
+00323 atomic<T>& operator=( <span class="keyword">const</span> atomic<T>& rhs ) {store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;} \
+00324 };
+00325 __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">unsigned</span>,size_t)
+00326 __TBB_DECL_ATOMIC_ALT(<span class="keywordtype">int</span>,ptrdiff_t)
+00327 #else
+00328 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span>)
+00329 __TBB_DECL_ATOMIC(<span class="keywordtype">int</span>)
+00330 #endif <span class="comment">/* defined(_MSC_VER) && __TBB_WORDSIZE==4 */</span>
+00331
+00332 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)
+00333 __TBB_DECL_ATOMIC(<span class="keywordtype">short</span>)
+00334 __TBB_DECL_ATOMIC(<span class="keywordtype">char</span>)
+00335 __TBB_DECL_ATOMIC(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>)
+00336 __TBB_DECL_ATOMIC(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)
+00337
+00338 #if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED)
+00339 __TBB_DECL_ATOMIC(<span class="keywordtype">wchar_t</span>)
+00340 #endif <span class="comment">/* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */</span>
+00341
+00342 template<typename T> struct atomic<T*>: internal::atomic_impl<T*,ptrdiff_t,T> {
+00343 T* operator=( T* rhs ) {
+00344 <span class="comment">// "this" required here in strict ISO C++ because store_with_release is a dependent name</span>
+00345 <span class="keywordflow">return</span> this->store_with_release(rhs);
00346 }
-00347
-00348 value_type compare_and_swap( value_type value, value_type comparand ) {
-00349 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
+00347 atomic<T*>& operator=( <span class="keyword">const</span> atomic<T*>& rhs ) {this->store_with_release(rhs); <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+00348 T* operator->()<span class="keyword"> const </span>{
+00349 <span class="keywordflow">return</span> (*this);
00350 }
-00351
-00352 <span class="keyword">template</span><memory_semantics M>
-00353 value_type fetch_and_store( value_type value ) {
-00354 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&my_value,internal::intptr(value)));
-00355 }
-00356
-00357 value_type fetch_and_store( value_type value ) {
-00358 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
-00359 }
+00351 };
+00352
+00353 <span class="keyword">template</span><>
+00354 <span class="keyword">struct </span>atomic<void*> {
+00355 <span class="keyword">private</span>:
+00356 <span class="keywordtype">void</span>* my_value;
+00357
+00358 <span class="keyword">public</span>:
+00359 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* value_type;
00360
-00361 operator value_type()<span class="keyword"> const </span>{
-00362 <span class="keywordflow">return</span> __TBB_load_with_acquire(my_value);
-00363 }
-00364
-00365 value_type operator=( value_type rhs ) {
-00366 __TBB_store_with_release(my_value,rhs);
-00367 <span class="keywordflow">return</span> rhs;
+00361 <span class="keyword">template</span><memory_semantics M>
+00362 value_type compare_and_swap( value_type value, value_type comparand ) {
+00363 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&my_value,internal::intptr(value),internal::intptr(comparand)));
+00364 }
+00365
+00366 value_type compare_and_swap( value_type value, value_type comparand ) {
+00367 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
00368 }
00369
-00370 atomic<void*>& operator=( <span class="keyword">const</span> atomic<void*>& rhs ) {
-00371 __TBB_store_with_release(my_value,rhs);
-00372 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00370 <span class="keyword">template</span><memory_semantics M>
+00371 value_type fetch_and_store( value_type value ) {
+00372 <span class="keywordflow">return</span> value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&my_value,internal::intptr(value)));
00373 }
-00374 };
-00375
-00376 <span class="keyword">template</span><>
-00377 <span class="keyword">struct </span>atomic<bool> {
-00378 <span class="keyword">private</span>:
-00379 <span class="keywordtype">bool</span> my_value;
-00380 <span class="keyword">typedef</span> internal::atomic_word<sizeof(bool)>::word word;
-00381 <span class="keyword">public</span>:
-00382 <span class="keyword">typedef</span> <span class="keywordtype">bool</span> value_type;
-00383 <span class="keyword">template</span><memory_semantics M>
-00384 value_type compare_and_swap( value_type value, value_type comparand ) {
-00385 <span class="keywordflow">return</span> internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&my_value,word(value),word(comparand))!=0;
+00374
+00375 value_type fetch_and_store( value_type value ) {
+00376 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+00377 }
+00378
+00379 operator value_type()<span class="keyword"> const </span>{
+00380 <span class="keywordflow">return</span> __TBB_load_with_acquire(my_value);
+00381 }
+00382
+00383 value_type operator=( value_type rhs ) {
+00384 __TBB_store_with_release(my_value,rhs);
+00385 <span class="keywordflow">return</span> rhs;
00386 }
00387
-00388 value_type compare_and_swap( value_type value, value_type comparand ) {
-00389 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
-00390 }
-00391
-00392 <span class="keyword">template</span><memory_semantics M>
-00393 value_type fetch_and_store( value_type value ) {
-00394 <span class="keywordflow">return</span> internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&my_value,word(value))!=0;
-00395 }
-00396
-00397 value_type fetch_and_store( value_type value ) {
-00398 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
-00399 }
-00400
-00401 operator value_type()<span class="keyword"> const </span>{
-00402 <span class="keywordflow">return</span> __TBB_load_with_acquire(my_value);
-00403 }
-00404
-00405 value_type operator=( value_type rhs ) {
-00406 __TBB_store_with_release(my_value,rhs);
-00407 <span class="keywordflow">return</span> rhs;
+00388 atomic<void*>& operator=( <span class="keyword">const</span> atomic<void*>& rhs ) {
+00389 __TBB_store_with_release(my_value,rhs);
+00390 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00391 }
+00392 };
+00393
+00394 <span class="keyword">template</span><>
+00395 <span class="keyword">struct </span>atomic<bool> {
+00396 <span class="keyword">private</span>:
+00397 <span class="keywordtype">bool</span> my_value;
+00398 <span class="keyword">typedef</span> internal::atomic_word<sizeof(bool)>::word word;
+00399 <span class="keyword">public</span>:
+00400 <span class="keyword">typedef</span> <span class="keywordtype">bool</span> value_type;
+00401 <span class="keyword">template</span><memory_semantics M>
+00402 value_type compare_and_swap( value_type value, value_type comparand ) {
+00403 <span class="keywordflow">return</span> internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&my_value,word(value),word(comparand))!=0;
+00404 }
+00405
+00406 value_type compare_and_swap( value_type value, value_type comparand ) {
+00407 <span class="keywordflow">return</span> compare_and_swap<__TBB_full_fence>(value,comparand);
00408 }
00409
-00410 atomic<bool>& operator=( <span class="keyword">const</span> atomic<bool>& rhs ) {
-00411 __TBB_store_with_release(my_value,rhs);
-00412 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00410 <span class="keyword">template</span><memory_semantics M>
+00411 value_type fetch_and_store( value_type value ) {
+00412 <span class="keywordflow">return</span> internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&my_value,word(value))!=0;
00413 }
-00414 };
-00415
-00416 } <span class="comment">// namespace tbb</span>
-00417
-00418 <span class="preprocessor">#if defined(_MSC_VER) && defined(_Wp64)</span>
-00419 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
-00420 <span class="preprocessor"> #pragma warning (pop)</span>
-00421 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _MSC_VER && _Wp64 */</span>
+00414
+00415 value_type fetch_and_store( value_type value ) {
+00416 <span class="keywordflow">return</span> fetch_and_store<__TBB_full_fence>(value);
+00417 }
+00418
+00419 operator value_type()<span class="keyword"> const </span>{
+00420 <span class="keywordflow">return</span> __TBB_load_with_acquire(my_value);
+00421 }
00422
-00423 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
+00423 value_type operator=( value_type rhs ) {
+00424 __TBB_store_with_release(my_value,rhs);
+00425 <span class="keywordflow">return</span> rhs;
+00426 }
+00427
+00428 atomic<bool>& operator=( <span class="keyword">const</span> atomic<bool>& rhs ) {
+00429 __TBB_store_with_release(my_value,rhs);
+00430 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00431 }
+00432 };
+00433
+00434 } <span class="comment">// namespace tbb</span>
+00435
+00436 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)</span>
+00437 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00438 <span class="preprocessor"></span><span class="preprocessor">#endif // warnings 4244, 4267 are back</span>
+00439 <span class="preprocessor"></span>
+00440 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_atomic_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00285.html b/doc/html/a00325.html
similarity index 77%
rename from doc/html/a00285.html
rename to doc/html/a00325.html
index 68e09da..6891545 100644
--- a/doc/html/a00285.html
+++ b/doc/html/a00325.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>blocked_range.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -35,45 +35,45 @@
00037
00038
00039 <span class="keyword">template</span><<span class="keyword">typename</span> Value>
-<a name="l00040"></a><a class="code" href="a00169.html">00040</a> <span class="keyword">class </span><a class="code" href="a00169.html">blocked_range</a> {
+<a name="l00040"></a><a class="code" href="a00195.html">00040</a> <span class="keyword">class </span><a class="code" href="a00195.html">blocked_range</a> {
00041 <span class="keyword">public</span>:
00043
-<a name="l00045"></a><a class="code" href="a00169.html#w0">00045</a> <span class="keyword">typedef</span> Value <a class="code" href="a00169.html#w0">const_iterator</a>;
+<a name="l00045"></a><a class="code" href="a00195.html#w0">00045</a> <span class="keyword">typedef</span> Value <a class="code" href="a00195.html#w0">const_iterator</a>;
00046
-<a name="l00048"></a><a class="code" href="a00169.html#w1">00048</a> <span class="keyword">typedef</span> std::size_t size_type;
+<a name="l00048"></a><a class="code" href="a00195.html#w1">00048</a> <span class="keyword">typedef</span> std::size_t size_type;
00049
00051
-<a name="l00052"></a><a class="code" href="a00169.html#a0">00052</a> <a class="code" href="a00169.html">blocked_range</a>() : my_begin(), my_end() {}
+<a name="l00052"></a><a class="code" href="a00195.html#a0">00052</a> <a class="code" href="a00195.html">blocked_range</a>() : my_begin(), my_end() {}
00053
-<a name="l00055"></a><a class="code" href="a00169.html#a1">00055</a> <a class="code" href="a00169.html">blocked_range</a>( Value begin_, Value end_, size_type grainsize_=1 ) :
+<a name="l00055"></a><a class="code" href="a00195.html#a1">00055</a> <a class="code" href="a00195.html">blocked_range</a>( Value begin_, Value end_, size_type grainsize_=1 ) :
00056 my_end(end_), my_begin(begin_), my_grainsize(grainsize_)
00057 {
00058 __TBB_ASSERT( my_grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
00059 }
00060
-<a name="l00062"></a><a class="code" href="a00169.html#a2">00062</a> const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+<a name="l00062"></a><a class="code" href="a00195.html#a2">00062</a> const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
00063
-<a name="l00065"></a><a class="code" href="a00169.html#a3">00065</a> const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00065"></a><a class="code" href="a00195.html#a3">00065</a> const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
00066
00068
-<a name="l00069"></a><a class="code" href="a00169.html#a4">00069</a> size_type size()<span class="keyword"> const </span>{
+<a name="l00069"></a><a class="code" href="a00195.html#a4">00069</a> size_type size()<span class="keyword"> const </span>{
00070 __TBB_ASSERT( !(end()<begin()), <span class="stringliteral">"size() unspecified if end()<begin()"</span> );
00071 <span class="keywordflow">return</span> size_type(my_end-my_begin);
00072 }
00073
-<a name="l00075"></a><a class="code" href="a00169.html#a5">00075</a> size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+<a name="l00075"></a><a class="code" href="a00195.html#a5">00075</a> size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
00076
00077 <span class="comment">//------------------------------------------------------------------------</span>
00078 <span class="comment">// Methods that implement Range concept</span>
00079 <span class="comment">//------------------------------------------------------------------------</span>
00080
-<a name="l00082"></a><a class="code" href="a00169.html#a6">00082</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin<my_end);}
+<a name="l00082"></a><a class="code" href="a00195.html#a6">00082</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !(my_begin<my_end);}
00083
00085
-<a name="l00086"></a><a class="code" href="a00169.html#a7">00086</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<size();}
+<a name="l00086"></a><a class="code" href="a00195.html#a7">00086</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize<size();}
00087
00089
-<a name="l00091"></a><a class="code" href="a00169.html#a8">00091</a> <a class="code" href="a00169.html">blocked_range</a>( <a class="code" href="a00169.html">blocked_range</a>& r, <a class="code" href="a00221.html">split</a> ) :
+<a name="l00091"></a><a class="code" href="a00195.html#a8">00091</a> <a class="code" href="a00195.html">blocked_range</a>( <a class="code" href="a00195.html">blocked_range</a>& r, <a class="code" href="a00254.html">split</a> ) :
00092 my_end(r.my_end),
00093 my_begin(do_split(r)),
00094 my_grainsize(r.my_grainsize)
@@ -85,10 +85,10 @@
00101 size_type my_grainsize;
00102
00104
-00105 <span class="keyword">static</span> Value do_split( <a class="code" href="a00169.html">blocked_range</a>& r ) {
-00106 __TBB_ASSERT( r.<a class="code" href="a00169.html#a7">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
-00107 Value middle = r.<a class="code" href="a00169.html#r1">my_begin</a> + (r.<a class="code" href="a00169.html#r0">my_end</a>-r.<a class="code" href="a00169.html#r1">my_begin</a>)/2u;
-00108 r.<a class="code" href="a00169.html#r0">my_end</a> = middle;
+00105 <span class="keyword">static</span> Value do_split( <a class="code" href="a00195.html">blocked_range</a>& r ) {
+00106 __TBB_ASSERT( r.<a class="code" href="a00195.html#a7">is_divisible</a>(), <span class="stringliteral">"cannot split blocked_range that is not divisible"</span> );
+00107 Value middle = r.<a class="code" href="a00195.html#r1">my_begin</a> + (r.<a class="code" href="a00195.html#r0">my_end</a>-r.<a class="code" href="a00195.html#r1">my_begin</a>)/2u;
+00108 r.<a class="code" href="a00195.html#r0">my_end</a> = middle;
00109 <span class="keywordflow">return</span> middle;
00110 }
00111
@@ -104,7 +104,7 @@
00121 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00286.html b/doc/html/a00326.html
similarity index 74%
rename from doc/html/a00286.html
rename to doc/html/a00326.html
index 98b1db0..b508dd5 100644
--- a/doc/html/a00286.html
+++ b/doc/html/a00326.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>blocked_range2d.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -35,10 +35,10 @@
00028
00030
00031 <span class="keyword">template</span><<span class="keyword">typename</span> RowValue, <span class="keyword">typename</span> ColValue=RowValue>
-<a name="l00032"></a><a class="code" href="a00170.html">00032</a> <span class="keyword">class </span><a class="code" href="a00170.html">blocked_range2d</a> {
+<a name="l00032"></a><a class="code" href="a00196.html">00032</a> <span class="keyword">class </span><a class="code" href="a00196.html">blocked_range2d</a> {
00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00170.html#w0">00035</a> <span class="keyword">typedef</span> <a class="code" href="a00169.html">blocked_range<RowValue></a> <a class="code" href="a00169.html">row_range_type</a>;
-00036 <span class="keyword">typedef</span> <a class="code" href="a00169.html">blocked_range<ColValue></a> <a class="code" href="a00169.html">col_range_type</a>;
+<a name="l00035"></a><a class="code" href="a00196.html#w0">00035</a> <span class="keyword">typedef</span> <a class="code" href="a00195.html">blocked_range<RowValue></a> <a class="code" href="a00195.html">row_range_type</a>;
+00036 <span class="keyword">typedef</span> <a class="code" href="a00195.html">blocked_range<ColValue></a> <a class="code" href="a00195.html">col_range_type</a>;
00037
00038 <span class="keyword">private</span>:
00039 row_range_type my_rows;
@@ -46,43 +46,43 @@
00041
00042 <span class="keyword">public</span>:
00043
-00044 <a class="code" href="a00170.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> row_range_type::size_type row_grainsize,
+00044 <a class="code" href="a00196.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> row_range_type::size_type row_grainsize,
00045 ColValue col_begin, ColValue col_end, <span class="keyword">typename</span> col_range_type::size_type col_grainsize ) :
00046 my_rows(row_begin,row_end,row_grainsize),
00047 my_cols(col_begin,col_end,col_grainsize)
00048 {
00049 }
00050
-00051 <a class="code" href="a00170.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end,
+00051 <a class="code" href="a00196.html">blocked_range2d</a>( RowValue row_begin, RowValue row_end,
00052 ColValue col_begin, ColValue col_end ) :
00053 my_rows(row_begin,row_end),
00054 my_cols(col_begin,col_end)
00055 {
00056 }
00057
-<a name="l00059"></a><a class="code" href="a00170.html#a2">00059</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
+<a name="l00059"></a><a class="code" href="a00196.html#a2">00059</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
00060 <span class="comment">// Yes, it is a logical OR here, not AND.</span>
-00061 <span class="keywordflow">return</span> my_rows.<a class="code" href="a00169.html#a6">empty</a>() || my_cols.<a class="code" href="a00169.html#a6">empty</a>();
+00061 <span class="keywordflow">return</span> my_rows.<a class="code" href="a00195.html#a6">empty</a>() || my_cols.<a class="code" href="a00195.html#a6">empty</a>();
00062 }
00063
-<a name="l00065"></a><a class="code" href="a00170.html#a3">00065</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-00066 <span class="keywordflow">return</span> my_rows.<a class="code" href="a00169.html#a7">is_divisible</a>() || my_cols.<a class="code" href="a00169.html#a7">is_divisible</a>();
+<a name="l00065"></a><a class="code" href="a00196.html#a3">00065</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+00066 <span class="keywordflow">return</span> my_rows.<a class="code" href="a00195.html#a7">is_divisible</a>() || my_cols.<a class="code" href="a00195.html#a7">is_divisible</a>();
00067 }
00068
-00069 <a class="code" href="a00170.html">blocked_range2d</a>( <a class="code" href="a00170.html">blocked_range2d</a>& r, <a class="code" href="a00221.html">split</a> ) :
+00069 <a class="code" href="a00196.html">blocked_range2d</a>( <a class="code" href="a00196.html">blocked_range2d</a>& r, <a class="code" href="a00254.html">split</a> ) :
00070 my_rows(r.my_rows),
00071 my_cols(r.my_cols)
00072 {
-00073 <span class="keywordflow">if</span>( my_rows.<a class="code" href="a00169.html#a4">size</a>()*double(my_cols.<a class="code" href="a00169.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00169.html#a4">size</a>()*double(my_rows.<a class="code" href="a00169.html#a5">grainsize</a>()) ) {
-00074 my_cols.<a class="code" href="a00169.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00170.html#r1">my_cols</a>);
+00073 <span class="keywordflow">if</span>( my_rows.<a class="code" href="a00195.html#a4">size</a>()*double(my_cols.<a class="code" href="a00195.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00195.html#a4">size</a>()*double(my_rows.<a class="code" href="a00195.html#a5">grainsize</a>()) ) {
+00074 my_cols.<a class="code" href="a00195.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00196.html#r1">my_cols</a>);
00075 } <span class="keywordflow">else</span> {
-00076 my_rows.<a class="code" href="a00169.html#r1">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00170.html#r0">my_rows</a>);
+00076 my_rows.<a class="code" href="a00195.html#r1">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00196.html#r0">my_rows</a>);
00077 }
00078 }
00079
-<a name="l00081"></a><a class="code" href="a00170.html#a5">00081</a> <span class="keyword">const</span> row_range_type& rows()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00081"></a><a class="code" href="a00196.html#a5">00081</a> <span class="keyword">const</span> row_range_type& rows()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
00082
-<a name="l00084"></a><a class="code" href="a00170.html#a6">00084</a> <span class="keyword">const</span> col_range_type& cols()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00084"></a><a class="code" href="a00196.html#a6">00084</a> <span class="keyword">const</span> col_range_type& cols()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
00085 };
00086
00087 } <span class="comment">// namespace tbb </span>
@@ -90,7 +90,7 @@
00089 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range2d_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00287.html b/doc/html/a00327.html
similarity index 69%
rename from doc/html/a00287.html
rename to doc/html/a00327.html
index 61e2f93..803628d 100644
--- a/doc/html/a00287.html
+++ b/doc/html/a00327.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>blocked_range3d.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -35,11 +35,11 @@
00028
00030
00031 <span class="keyword">template</span><<span class="keyword">typename</span> PageValue, <span class="keyword">typename</span> RowValue=PageValue, <span class="keyword">typename</span> ColValue=RowValue>
-<a name="l00032"></a><a class="code" href="a00171.html">00032</a> <span class="keyword">class </span><a class="code" href="a00171.html">blocked_range3d</a> {
+<a name="l00032"></a><a class="code" href="a00197.html">00032</a> <span class="keyword">class </span><a class="code" href="a00197.html">blocked_range3d</a> {
00033 <span class="keyword">public</span>:
-<a name="l00035"></a><a class="code" href="a00171.html#w0">00035</a> <span class="keyword">typedef</span> <a class="code" href="a00169.html">blocked_range<PageValue></a> <a class="code" href="a00169.html">page_range_type</a>;
-00036 <span class="keyword">typedef</span> <a class="code" href="a00169.html">blocked_range<RowValue></a> <a class="code" href="a00169.html">row_range_type</a>;
-00037 <span class="keyword">typedef</span> <a class="code" href="a00169.html">blocked_range<ColValue></a> <a class="code" href="a00169.html">col_range_type</a>;
+<a name="l00035"></a><a class="code" href="a00197.html#w0">00035</a> <span class="keyword">typedef</span> <a class="code" href="a00195.html">blocked_range<PageValue></a> <a class="code" href="a00195.html">page_range_type</a>;
+00036 <span class="keyword">typedef</span> <a class="code" href="a00195.html">blocked_range<RowValue></a> <a class="code" href="a00195.html">row_range_type</a>;
+00037 <span class="keyword">typedef</span> <a class="code" href="a00195.html">blocked_range<ColValue></a> <a class="code" href="a00195.html">col_range_type</a>;
00038
00039 <span class="keyword">private</span>:
00040 page_range_type my_pages;
@@ -48,7 +48,7 @@
00043
00044 <span class="keyword">public</span>:
00045
-00046 <a class="code" href="a00171.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end,
+00046 <a class="code" href="a00197.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end,
00047 RowValue row_begin, RowValue row_end,
00048 ColValue col_begin, ColValue col_end ) :
00049 my_pages(page_begin,page_end),
@@ -57,7 +57,7 @@
00052 {
00053 }
00054
-00055 <a class="code" href="a00171.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> page_range_type::size_type page_grainsize,
+00055 <a class="code" href="a00197.html">blocked_range3d</a>( PageValue page_begin, PageValue page_end, <span class="keyword">typename</span> page_range_type::size_type page_grainsize,
00056 RowValue row_begin, RowValue row_end, <span class="keyword">typename</span> row_range_type::size_type row_grainsize,
00057 ColValue col_begin, ColValue col_end, <span class="keyword">typename</span> col_range_type::size_type col_grainsize ) :
00058 my_pages(page_begin,page_end,page_grainsize),
@@ -66,40 +66,40 @@
00061 {
00062 }
00063
-<a name="l00065"></a><a class="code" href="a00171.html#a2">00065</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
+<a name="l00065"></a><a class="code" href="a00197.html#a2">00065</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{
00066 <span class="comment">// Yes, it is a logical OR here, not AND.</span>
-00067 <span class="keywordflow">return</span> my_pages.<a class="code" href="a00169.html#a6">empty</a>() || my_rows.<a class="code" href="a00169.html#a6">empty</a>() || my_cols.<a class="code" href="a00169.html#a6">empty</a>();
+00067 <span class="keywordflow">return</span> my_pages.<a class="code" href="a00195.html#a6">empty</a>() || my_rows.<a class="code" href="a00195.html#a6">empty</a>() || my_cols.<a class="code" href="a00195.html#a6">empty</a>();
00068 }
00069
-<a name="l00071"></a><a class="code" href="a00171.html#a3">00071</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
-00072 <span class="keywordflow">return</span> my_pages.<a class="code" href="a00169.html#a7">is_divisible</a>() || my_rows.<a class="code" href="a00169.html#a7">is_divisible</a>() || my_cols.<a class="code" href="a00169.html#a7">is_divisible</a>();
+<a name="l00071"></a><a class="code" href="a00197.html#a3">00071</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+00072 <span class="keywordflow">return</span> my_pages.<a class="code" href="a00195.html#a7">is_divisible</a>() || my_rows.<a class="code" href="a00195.html#a7">is_divisible</a>() || my_cols.<a class="code" href="a00195.html#a7">is_divisible</a>();
00073 }
00074
-00075 <a class="code" href="a00171.html">blocked_range3d</a>( <a class="code" href="a00171.html">blocked_range3d</a>& r, <a class="code" href="a00221.html">split</a> ) :
+00075 <a class="code" href="a00197.html">blocked_range3d</a>( <a class="code" href="a00197.html">blocked_range3d</a>& r, <a class="code" href="a00254.html">split</a> ) :
00076 my_pages(r.my_pages),
00077 my_rows(r.my_rows),
00078 my_cols(r.my_cols)
00079 {
-00080 <span class="keywordflow">if</span>( my_pages.<a class="code" href="a00169.html#a4">size</a>()*double(my_rows.<a class="code" href="a00169.html#a5">grainsize</a>()) < my_rows.<a class="code" href="a00169.html#a4">size</a>()*double(my_pages.<a class="code" href="a00169.html#a5">grainsize</a>()) ) {
-00081 <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00169.html#a4">size</a>()*double(my_cols.<a class="code" href="a00169.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00169.html#a4">size</a>()*double(my_rows.<a class="code" href="a00169.html#a5">grainsize</a>()) ) {
-00082 my_cols.<a class="code" href="a00169.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00171.html#r2">my_cols</a>);
+00080 <span class="keywordflow">if</span>( my_pages.<a class="code" href="a00195.html#a4">size</a>()*double(my_rows.<a class="code" href="a00195.html#a5">grainsize</a>()) < my_rows.<a class="code" href="a00195.html#a4">size</a>()*double(my_pages.<a class="code" href="a00195.html#a5">grainsize</a>()) ) {
+00081 <span class="keywordflow">if</span> ( my_rows.<a class="code" href="a00195.html#a4">size</a>()*double(my_cols.<a class="code" href="a00195.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00195.html#a4">size</a>()*double(my_rows.<a class="code" href="a00195.html#a5">grainsize</a>()) ) {
+00082 my_cols.<a class="code" href="a00195.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00197.html#r2">my_cols</a>);
00083 } <span class="keywordflow">else</span> {
-00084 my_rows.<a class="code" href="a00169.html#r1">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00171.html#r1">my_rows</a>);
+00084 my_rows.<a class="code" href="a00195.html#r1">my_begin</a> = row_range_type::do_split(r.<a class="code" href="a00197.html#r1">my_rows</a>);
00085 }
00086 } <span class="keywordflow">else</span> {
-00087 <span class="keywordflow">if</span> ( my_pages.<a class="code" href="a00169.html#a4">size</a>()*double(my_cols.<a class="code" href="a00169.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00169.html#a4">size</a>()*double(my_pages.<a class="code" href="a00169.html#a5">grainsize</a>()) ) {
-00088 my_cols.<a class="code" href="a00169.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00171.html#r2">my_cols</a>);
+00087 <span class="keywordflow">if</span> ( my_pages.<a class="code" href="a00195.html#a4">size</a>()*double(my_cols.<a class="code" href="a00195.html#a5">grainsize</a>()) < my_cols.<a class="code" href="a00195.html#a4">size</a>()*double(my_pages.<a class="code" href="a00195.html#a5">grainsize</a>()) ) {
+00088 my_cols.<a class="code" href="a00195.html#r1">my_begin</a> = col_range_type::do_split(r.<a class="code" href="a00197.html#r2">my_cols</a>);
00089 } <span class="keywordflow">else</span> {
-00090 my_pages.<a class="code" href="a00169.html#r1">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00171.html#r0">my_pages</a>);
+00090 my_pages.<a class="code" href="a00195.html#r1">my_begin</a> = page_range_type::do_split(r.<a class="code" href="a00197.html#r0">my_pages</a>);
00091 }
00092 }
00093 }
00094
-<a name="l00096"></a><a class="code" href="a00171.html#a5">00096</a> <span class="keyword">const</span> page_range_type& pages()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_pages;}
+<a name="l00096"></a><a class="code" href="a00197.html#a5">00096</a> <span class="keyword">const</span> page_range_type& pages()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_pages;}
00097
-<a name="l00099"></a><a class="code" href="a00171.html#a6">00099</a> <span class="keyword">const</span> row_range_type& rows()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
+<a name="l00099"></a><a class="code" href="a00197.html#a6">00099</a> <span class="keyword">const</span> row_range_type& rows()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_rows;}
00100
-<a name="l00102"></a><a class="code" href="a00171.html#a7">00102</a> <span class="keyword">const</span> col_range_type& cols()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
+<a name="l00102"></a><a class="code" href="a00197.html#a7">00102</a> <span class="keyword">const</span> col_range_type& cols()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_cols;}
00103
00104 };
00105
@@ -108,7 +108,7 @@
00108 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_blocked_range3d_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00288.html b/doc/html/a00328.html
similarity index 54%
rename from doc/html/a00288.html
rename to doc/html/a00328.html
index 06de9cb..998f736 100644
--- a/doc/html/a00288.html
+++ b/doc/html/a00328.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>cache_aligned_allocator.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -35,90 +35,92 @@
00028
00030 <span class="keyword">namespace </span>internal {
00032
-<a name="l00035"></a><a class="code" href="a00279.html#a0">00035</a> <span class="keyword">const</span> size_t <a class="code" href="a00279.html#a0">NFS_MaxLineSize</a> = 128;
+<a name="l00035"></a><a class="code" href="a00319.html#a1">00035</a> <span class="keyword">const</span> size_t <a class="code" href="a00319.html#a1">NFS_MaxLineSize</a> = 128;
00036
00038
-00039 size_t <a class="code" href="a00279.html#a16">NFS_GetLineSize</a>();
+00039 size_t __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a31">NFS_GetLineSize</a>();
00040
00042
-00043 <span class="keywordtype">void</span>* <a class="code" href="a00279.html#a17">NFS_Allocate</a>( size_t n_element, size_t element_size, <span class="keywordtype">void</span>* hint );
+00043 <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a32">NFS_Allocate</a>( size_t n_element, size_t element_size, <span class="keywordtype">void</span>* hint );
00044
00046
-00048 <span class="keywordtype">void</span> <a class="code" href="a00279.html#a18">NFS_Free</a>( <span class="keywordtype">void</span>* );
+00048 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a33">NFS_Free</a>( <span class="keywordtype">void</span>* );
00049 }
00051
-00053
-00056 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00057"></a><a class="code" href="a00172.html">00057</a> <span class="keyword">class </span><a class="code" href="a00172.html">cache_aligned_allocator</a> {
-00058 <span class="keyword">public</span>:
-00059 <span class="keyword">typedef</span> T* pointer;
-00060 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-00061 <span class="keyword">typedef</span> T& reference;
-00062 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00063 <span class="keyword">typedef</span> T value_type;
-00064 <span class="keyword">typedef</span> size_t size_type;
-00065 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00066 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-00067 <span class="keyword">typedef</span> <a class="code" href="a00172.html">cache_aligned_allocator<U></a> other;
-00068 };
-00069
-00070 <span class="preprocessor">#if _WIN64</span>
-00071 <span class="preprocessor"></span>
-00072
-00074 <span class="keywordtype">char</span>* _Charalloc( size_type size ) {
-00075 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*)internal::NFS_Allocate( size, <span class="keyword">sizeof</span>(T), 0 );
-00076 }
-00077 <span class="preprocessor">#endif </span><span class="comment">/* _WIN64 */</span>
-00078
-00079 <a class="code" href="a00172.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
-00080 <a class="code" href="a00172.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00172.html">cache_aligned_allocator</a>& ) <span class="keywordflow">throw</span>() {}
-00081 <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00172.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00172.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
-00082
-00083 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00084 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00085
-<a name="l00087"></a><a class="code" href="a00172.html#a5">00087</a> pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
-00088 <span class="comment">// The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt</span>
-00089 <span class="keywordflow">return</span> pointer(internal::NFS_Allocate( n, <span class="keyword">sizeof</span>(T), const_cast<void*>(hint) ));
-00090 }
-00091
-<a name="l00093"></a><a class="code" href="a00172.html#a6">00093</a> <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
-00094 internal::NFS_Free(p);
-00095 }
-00096
-<a name="l00098"></a><a class="code" href="a00172.html#a7">00098</a> size_type max_size() const throw() {
-00099 <span class="keywordflow">return</span> (~size_t(0)-internal::NFS_MaxLineSize)/<span class="keyword">sizeof</span>(T);
-00100 }
+00052 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00053 <span class="preprocessor"></span> <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+00054 <span class="preprocessor"> #pragma warning (push)</span>
+00055 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4100)</span>
+00056 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00057 <span class="preprocessor"></span>
+00059
+00062 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00063"></a><a class="code" href="a00198.html">00063</a> <span class="keyword">class </span><a class="code" href="a00198.html">cache_aligned_allocator</a> {
+00064 <span class="keyword">public</span>:
+00065 <span class="keyword">typedef</span> T* pointer;
+00066 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+00067 <span class="keyword">typedef</span> T& reference;
+00068 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00069 <span class="keyword">typedef</span> T value_type;
+00070 <span class="keyword">typedef</span> size_t size_type;
+00071 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00072 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+00073 <span class="keyword">typedef</span> <a class="code" href="a00198.html">cache_aligned_allocator<U></a> other;
+00074 };
+00075
+00076 <a class="code" href="a00198.html">cache_aligned_allocator</a>() <span class="keywordflow">throw</span>() {}
+00077 <a class="code" href="a00198.html">cache_aligned_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00198.html">cache_aligned_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+00078 <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00198.html">cache_aligned_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00198.html">cache_aligned_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+00079
+00080 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00081 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00082
+<a name="l00084"></a><a class="code" href="a00198.html#a5">00084</a> pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* hint=0 ) {
+00085 <span class="comment">// The "hint" argument is always ignored in NFS_Allocate thus const_cast shouldn't hurt</span>
+00086 <span class="keywordflow">return</span> pointer(internal::NFS_Allocate( n, <span class="keyword">sizeof</span>(T), const_cast<void*>(hint) ));
+00087 }
+00088
+<a name="l00090"></a><a class="code" href="a00198.html#a6">00090</a> <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
+00091 internal::NFS_Free(p);
+00092 }
+00093
+<a name="l00095"></a><a class="code" href="a00198.html#a7">00095</a> size_type max_size() const throw() {
+00096 <span class="keywordflow">return</span> (~size_t(0)-internal::NFS_MaxLineSize)/<span class="keyword">sizeof</span>(T);
+00097 }
+00098
+<a name="l00100"></a><a class="code" href="a00198.html#a8">00100</a> <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) T(value);}
00101
-<a name="l00103"></a><a class="code" href="a00172.html#a8">00103</a> <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) T(value);}
-00104
-<a name="l00106"></a><a class="code" href="a00172.html#a9">00106</a> <span class="keywordtype">void</span> destroy( pointer p ) {p->~T();}
-00107 };
-00108
-00110
-00111 <span class="keyword">template</span><>
-<a name="l00112"></a><a class="code" href="a00173.html">00112</a> <span class="keyword">class </span><a class="code" href="a00172.html">cache_aligned_allocator</a><void> {
-00113 <span class="keyword">public</span>:
-00114 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-00115 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-00116 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-00117 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-00118 <span class="keyword">typedef</span> <a class="code" href="a00172.html">cache_aligned_allocator<U></a> other;
-00119 };
-00120 };
-00121
-00122 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00123 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00172.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00172.html">cache_aligned_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-00124
-00125 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00126 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> cache_aligned_allocator<T>&, <span class="keyword">const</span> cache_aligned_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-00127
-00128 } <span class="comment">// namespace ThreadBuildingBlocks </span>
-00129
-00130 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_cache_aligned_allocator_H */</span>
+<a name="l00103"></a><a class="code" href="a00198.html#a9">00103</a> <span class="keywordtype">void</span> destroy( pointer p ) {p->~T();}
+00104 };
+00105
+00106 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00107 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00108 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+00109 <span class="preprocessor"></span>
+00111
+00112 <span class="keyword">template</span><>
+<a name="l00113"></a><a class="code" href="a00199.html">00113</a> <span class="keyword">class </span><a class="code" href="a00198.html">cache_aligned_allocator</a><void> {
+00114 <span class="keyword">public</span>:
+00115 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+00116 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+00117 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+00118 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+00119 <span class="keyword">typedef</span> <a class="code" href="a00198.html">cache_aligned_allocator<U></a> other;
+00120 };
+00121 };
+00122
+00123 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00124 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00198.html">cache_aligned_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00198.html">cache_aligned_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+00125
+00126 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00127 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> cache_aligned_allocator<T>&, <span class="keyword">const</span> cache_aligned_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+00128
+00129 } <span class="comment">// namespace tbb</span>
+00130
+00131 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_cache_aligned_allocator_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00329.html b/doc/html/a00329.html
new file mode 100644
index 0000000..0f1b4d4
--- /dev/null
+++ b/doc/html/a00329.html
@@ -0,0 +1,931 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_hash_map.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>concurrent_hash_map.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_concurrent_hash_map_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_hash_map_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include <stdexcept></span>
+00025 <span class="preprocessor">#include <iterator></span>
+00026 <span class="preprocessor">#include <utility></span> <span class="comment">// Need std::pair</span>
+00027 <span class="preprocessor">#include <cstring></span> <span class="comment">// Need std::memset</span>
+00028 <span class="preprocessor">#include <string></span>
+00029 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00030 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+00031 <span class="preprocessor">#include "tbb_allocator.h"</span>
+00032 <span class="preprocessor">#include "spin_rw_mutex.h"</span>
+00033 <span class="preprocessor">#include "atomic.h"</span>
+00034 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+00035 <span class="preprocessor"></span><span class="preprocessor">#include <typeinfo></span>
+00036 <span class="preprocessor">#endif</span>
+00037 <span class="preprocessor"></span>
+00038 <span class="keyword">namespace </span>tbb {
+00039
+00040 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>tbb_hash_compare;
+00041 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare = tbb_hash_compare<Key>, <span class="keyword">typename</span> A = tbb_allocator<std::pair<Key, T> > >
+00042 <span class="keyword">class </span>concurrent_hash_map;
+00043
+00045 <span class="keyword">namespace </span>internal {
+<a name="l00047"></a><a class="code" href="a00319.html#a2">00047</a> <span class="keyword">typedef</span> size_t hashcode_t;
+<a name="l00049"></a><a class="code" href="a00222.html">00049</a> <span class="keyword">class </span><a class="code" href="a00222.html">hash_map_base</a> {
+00050 <span class="keyword">public</span>:
+00051 <span class="comment">// Mutex types for each layer of the container</span>
+00052 <span class="keyword">typedef</span> <a class="code" href="a00252.html">spin_rw_mutex</a> <a class="code" href="a00252.html">node_mutex_t</a>;
+00053 <span class="keyword">typedef</span> <a class="code" href="a00252.html">spin_rw_mutex</a> <a class="code" href="a00252.html">chain_mutex_t</a>;
+00054 <span class="keyword">typedef</span> <a class="code" href="a00252.html">spin_rw_mutex</a> <a class="code" href="a00252.html">segment_mutex_t</a>;
+00055
+<a name="l00057"></a><a class="code" href="a00222.html#w3">00057</a> <span class="keyword">typedef</span> <a class="code" href="a00319.html#a2">internal::hashcode_t</a> hashcode_t;
+<a name="l00059"></a><a class="code" href="a00222.html#s0">00059</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t n_segment_bits = 6;
+<a name="l00061"></a><a class="code" href="a00222.html#s1">00061</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t n_segment = size_t(1)<<n_segment_bits;
+<a name="l00063"></a><a class="code" href="a00222.html#s2">00063</a> <span class="keyword">static</span> <span class="keyword">const</span> size_t max_physical_size = size_t(1)<<(8*<span class="keyword">sizeof</span>(hashcode_t)-n_segment_bits);
+00064 };
+00065
+00066 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+00067 <span class="keyword">class </span><a class="code" href="a00224.html">hash_map_range</a>;
+00068
+00069 <span class="keyword">struct </span>hash_map_segment_base {
+00071 <a class="code" href="a00252.html">hash_map_base::segment_mutex_t</a> my_mutex;
+00072
+00073 <span class="comment">// Number of nodes</span>
+00074 <a class="code" href="a00191.html">atomic<size_t></a> my_logical_size;
+00075
+00076 <span class="comment">// Size of chains</span>
+00078 <span class="comment"></span> size_t my_physical_size;
+00079
+00081
+00082 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_grow_predicate() <span class="keyword">const</span>;
+00083 };
+00084
+00086
+00088 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00089"></a><a class="code" href="a00223.html">00089</a> <span class="keyword">class </span><a class="code" href="a00223.html">hash_map_iterator</a>
+00090 : <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value>
+00091 {
+00092 <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::node node;
+00093 <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::chain chain;
+00094 <span class="keyword">typedef</span> <span class="keyword">typename</span> Container::segment segment;
+00095
+00097 Container* my_table;
+00098
+00100 node* my_node;
+00101
+00103 size_t my_array_index;
+00104
+00106 size_t my_segment_index;
+00107
+00108 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00109 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,U></a>& j );
+00110
+00111 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00112 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,U></a>& j );
+00113
+00114 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00115 <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<C,U></a>& j );
+00116
+00117 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+00118 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00223.html">internal::hash_map_iterator</a>;
+00119
+00120 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00121 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00224.html">internal::hash_map_range</a>;
+00122
+00123 <span class="keywordtype">void</span> advance_to_next_node() {
+00124 size_t i = my_array_index+1;
+00125 <span class="keywordflow">do</span> {
+00126 segment &s = my_table->my_segment[my_segment_index];
+00127 <span class="keywordflow">while</span>( i<s.my_physical_size ) {
+00128 my_node = s.my_array[i].node_list;
+00129 <span class="keywordflow">if</span>( my_node ) <span class="keywordflow">goto</span> done;
+00130 ++i;
+00131 }
+00132 i = 0;
+00133 } <span class="keywordflow">while</span>( ++my_segment_index<my_table->n_segment );
+00134 done:
+00135 my_array_index = i;
+00136 }
+00137 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+00138 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00139 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00201.html">tbb::concurrent_hash_map</a>;
+00140 <span class="preprocessor">#else</span>
+00141 <span class="preprocessor"></span> <span class="keyword">public</span>: <span class="comment">// workaround</span>
+00142 <span class="preprocessor">#endif</span>
+00143 <span class="preprocessor"></span> <a class="code" href="a00223.html">hash_map_iterator</a>( <span class="keyword">const</span> Container& table, size_t segment_index, size_t array_index=0, node* b=NULL );
+00144 <span class="keyword">public</span>:
+<a name="l00146"></a><a class="code" href="a00223.html#a1">00146</a> <a class="code" href="a00223.html">hash_map_iterator</a>() {}
+00147 <a class="code" href="a00223.html">hash_map_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00223.html">hash_map_iterator<Container,typename Container::value_type></a>& other ) :
+00148 my_table(other.my_table),
+00149 my_node(other.my_node),
+00150 my_array_index(other.my_array_index),
+00151 my_segment_index(other.my_segment_index)
+00152 {}
+00153 Value& operator*()<span class="keyword"> const </span>{
+00154 __TBB_ASSERT( my_node, <span class="stringliteral">"iterator uninitialized or at end of container?"</span> );
+00155 <span class="keywordflow">return</span> my_node->item;
+00156 }
+00157 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+00158 hash_map_iterator& operator++();
+00159
+<a name="l00161"></a><a class="code" href="a00223.html#a6">00161</a> Value* operator++(<span class="keywordtype">int</span>) {
+00162 Value* result = &operator*();
+00163 operator++();
+00164 <span class="keywordflow">return</span> result;
+00165 }
+00166 };
+00167
+00168 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+00169 hash_map_iterator<Container,Value>::hash_map_iterator( <span class="keyword">const</span> Container& table, size_t segment_index, size_t array_index, node* b ) :
+00170 my_table(const_cast<Container*>(&table)),
+00171 my_node(b),
+00172 my_array_index(array_index),
+00173 my_segment_index(segment_index)
+00174 {
+00175 <span class="keywordflow">if</span>( segment_index<my_table->n_segment ) {
+00176 <span class="keywordflow">if</span>( !my_node ) {
+00177 segment &s = my_table->my_segment[segment_index];
+00178 chain* first_chain = s.my_array;
+00179 <span class="keywordflow">if</span>( first_chain && my_array_index < s.my_physical_size)
+00180 my_node = first_chain[my_array_index].node_list;
+00181 }
+00182 <span class="keywordflow">if</span>( !my_node ) advance_to_next_node();
+00183 }
+00184 }
+00185
+00186 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+00187 hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
+00188 my_node=my_node->next;
+00189 <span class="keywordflow">if</span>( !my_node ) advance_to_next_node();
+00190 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00191 }
+00192
+00193 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00194 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> hash_map_iterator<Container,T>& i, <span class="keyword">const</span> hash_map_iterator<Container,U>& j ) {
+00195 <span class="keywordflow">return</span> i.<a class="code" href="a00223.html#r1">my_node</a>==j.<a class="code" href="a00223.html#r1">my_node</a>;
+00196 }
+00197
+00198 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00199 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> hash_map_iterator<Container,T>& i, <span class="keyword">const</span> hash_map_iterator<Container,U>& j ) {
+00200 <span class="keywordflow">return</span> i.<a class="code" href="a00223.html#r1">my_node</a>!=j.<a class="code" href="a00223.html#r1">my_node</a>;
+00201 }
+00202
+00204
+00205 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+<a name="l00206"></a><a class="code" href="a00224.html">00206</a> <span class="keyword">class </span><a class="code" href="a00224.html">hash_map_range</a> {
+00207 <span class="keyword">private</span>:
+00208 Iterator my_begin;
+00209 Iterator my_end;
+00210 <span class="keyword">mutable</span> Iterator my_midpoint;
+00211 size_t my_grainsize;
+00213 <span class="keywordtype">void</span> set_midpoint() <span class="keyword">const</span>;
+00214 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00224.html">hash_map_range</a>;
+00215 <span class="keyword">public</span>:
+<a name="l00217"></a><a class="code" href="a00224.html#w0">00217</a> <span class="keyword">typedef</span> std::size_t size_type;
+00218 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type value_type;
+00219 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::reference reference;
+00220 <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::difference_type difference_type;
+00221 <span class="keyword">typedef</span> Iterator iterator;
+00222
+<a name="l00224"></a><a class="code" href="a00224.html#a0">00224</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin==my_end;}
+00225
+<a name="l00227"></a><a class="code" href="a00224.html#a1">00227</a> <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{
+00228 <span class="keywordflow">return</span> my_midpoint!=my_end;
+00229 }
+<a name="l00231"></a><a class="code" href="a00224.html#a2">00231</a> <a class="code" href="a00224.html">hash_map_range</a>( <a class="code" href="a00224.html">hash_map_range</a>& r, <a class="code" href="a00254.html">split</a> ) :
+00232 my_end(r.my_end),
+00233 my_grainsize(r.my_grainsize)
+00234 {
+00235 r.<a class="code" href="a00224.html#r1">my_end</a> = my_begin = r.<a class="code" href="a00224.html#r2">my_midpoint</a>;
+00236 __TBB_ASSERT( my_begin!=my_end, <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+00237 __TBB_ASSERT( r.<a class="code" href="a00224.html#r0">my_begin</a>!=r.<a class="code" href="a00224.html#r1">my_end</a>, <span class="stringliteral">"Splitting despite the range is not divisible"</span> );
+00238 set_midpoint();
+00239 r.<a class="code" href="a00224.html#d0">set_midpoint</a>();
+00240 }
+00242 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+<a name="l00243"></a><a class="code" href="a00224.html#a3">00243</a> <a class="code" href="a00224.html">hash_map_range</a>( <a class="code" href="a00224.html">hash_map_range<U></a>& r) :
+00244 my_begin(r.my_begin),
+00245 my_end(r.my_end),
+00246 my_midpoint(r.my_midpoint),
+00247 my_grainsize(r.my_grainsize)
+00248 {}
+<a name="l00250"></a><a class="code" href="a00224.html#a4">00250</a> <a class="code" href="a00224.html">hash_map_range</a>( <span class="keyword">const</span> Iterator& begin_, <span class="keyword">const</span> Iterator& end_, size_type grainsize = 1 ) :
+00251 my_begin(begin_),
+00252 my_end(end_),
+00253 my_grainsize(grainsize)
+00254 {
+00255 set_midpoint();
+00256 __TBB_ASSERT( grainsize>0, <span class="stringliteral">"grainsize must be positive"</span> );
+00257 }
+00258 <span class="keyword">const</span> Iterator& begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_begin;}
+00259 <span class="keyword">const</span> Iterator& end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_end;}
+<a name="l00261"></a><a class="code" href="a00224.html#a7">00261</a> size_type grainsize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_grainsize;}
+00262 };
+00263
+00264 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator>
+00265 <span class="keywordtype">void</span> hash_map_range<Iterator>::set_midpoint()<span class="keyword"> const </span>{
+00266 size_t n = my_end.my_segment_index - my_begin.my_segment_index;
+00267 <span class="keywordflow">if</span>( n > 1 || (n == 1 && my_end.my_array_index > my_grainsize/2) ) {
+00268 <span class="comment">// Split by groups of segments</span>
+00269 my_midpoint = Iterator(*my_begin.my_table,(my_end.my_segment_index+my_begin.my_segment_index+1)/2u);
+00270 } <span class="keywordflow">else</span> {
+00271 <span class="comment">// Split by groups of nodes</span>
+00272 size_t m = my_end.my_array_index-my_begin.my_array_index;
+00273 <span class="keywordflow">if</span>( n ) m += my_begin.my_table->my_segment[my_begin.my_segment_index].my_physical_size;
+00274 <span class="keywordflow">if</span>( m > my_grainsize ) {
+00275 my_midpoint = Iterator(*my_begin.my_table,my_begin.my_segment_index,my_begin.my_array_index + m/2u);
+00276 } <span class="keywordflow">else</span> {
+00277 my_midpoint = my_end;
+00278 }
+00279 }
+00280 __TBB_ASSERT( my_begin.my_segment_index < my_midpoint.my_segment_index
+00281 || (my_begin.my_segment_index == my_midpoint.my_segment_index
+00282 && my_begin.my_array_index <= my_midpoint.my_array_index),
+00283 <span class="stringliteral">"my_begin is after my_midpoint"</span> );
+00284 __TBB_ASSERT( my_midpoint.my_segment_index < my_end.my_segment_index
+00285 || (my_midpoint.my_segment_index == my_end.my_segment_index
+00286 && my_midpoint.my_array_index <= my_end.my_array_index),
+00287 <span class="stringliteral">"my_midpoint is after my_end"</span> );
+00288 __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+00289 <span class="stringliteral">"[my_begin, my_midpoint) range should not be empty"</span> );
+00290 }
+<a name="l00292"></a><a class="code" href="a00319.html#a3">00292</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="a00319.html#a2">hashcode_t</a> <a class="code" href="a00319.html#a3">hash_multiplier</a> = <span class="keyword">sizeof</span>(hashcode_t)==4? 2654435769U : 11400714819323198485ULL;
+00294 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00295"></a><a class="code" href="a00319.html#a36">00295</a> <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="a00319.html#a2">hashcode_t</a> <a class="code" href="a00319.html#a36">hasher</a>( <span class="keyword">const</span> T& t ) {
+00296 <span class="keywordflow">return</span> static_cast<hashcode_t>( t ) * hash_multiplier;
+00297 }
+00298 <span class="keyword">template</span><<span class="keyword">typename</span> P>
+00299 <span class="keyword">inline</span> <span class="keyword">static</span> hashcode_t <a class="code" href="a00319.html#a36">hasher</a>( P* ptr ) {
+00300 hashcode_t <span class="keyword">const</span> h = reinterpret_cast<hashcode_t>( ptr );
+00301 <span class="keywordflow">return</span> (h >> 3) ^ h;
+00302 }
+00303 <span class="keyword">template</span><<span class="keyword">typename</span> E, <span class="keyword">typename</span> S, <span class="keyword">typename</span> A>
+00304 <span class="keyword">inline</span> <span class="keyword">static</span> hashcode_t <a class="code" href="a00319.html#a36">hasher</a>( <span class="keyword">const</span> std::basic_string<E,S,A>& s ) {
+00305 hashcode_t h = 0;
+00306 <span class="keywordflow">for</span>( <span class="keyword">const</span> E* c = s.c_str(); *c; c++ )
+00307 h = static_cast<hashcode_t>(*c) ^ (h * hash_multiplier);
+00308 <span class="keywordflow">return</span> h;
+00309 }
+00310 <span class="keyword">template</span><<span class="keyword">typename</span> F, <span class="keyword">typename</span> S>
+00311 <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="a00319.html#a2">hashcode_t</a> <a class="code" href="a00319.html#a36">hasher</a>( <span class="keyword">const</span> std::pair<F,S>& p ) {
+00312 <span class="keywordflow">return</span> <a class="code" href="a00319.html#a36">hasher</a>(p.first) ^ <a class="code" href="a00319.html#a36">hasher</a>(p.second);
+00313 }
+00314 } <span class="comment">// namespace internal</span>
+00316 <span class="comment"></span>
+00318 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00319"></a><a class="code" href="a00269.html">00319</a> <span class="keyword">struct </span><a class="code" href="a00269.html">tbb_hash_compare</a> {
+00320 <span class="keyword">static</span> <a class="code" href="a00319.html#a2">internal::hashcode_t</a> hash( <span class="keyword">const</span> T& t ) { <span class="keywordflow">return</span> internal::hasher(t); }
+00321 <span class="keyword">static</span> <span class="keywordtype">bool</span> equal( <span class="keyword">const</span> T& a, <span class="keyword">const</span> T& b ) { <span class="keywordflow">return</span> a == b; }
+00322 };
+00323
+00325
+00350 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00351"></a><a class="code" href="a00201.html">00351</a> <span class="keyword">class </span><a class="code" href="a00201.html">concurrent_hash_map</a> : <span class="keyword">protected</span> internal::hash_map_base {
+00352 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+00353 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00223.html">internal::hash_map_iterator</a>;
+00354
+00355 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00356 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00224.html">internal::hash_map_range</a>;
+00357
+00358 <span class="keyword">struct </span>node;
+00359 <span class="keyword">friend</span> <span class="keyword">struct </span>node;
+00360 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<node>::other node_allocator_type;
+00361
+00362 <span class="keyword">public</span>:
+00363 <span class="keyword">class </span><a class="code" href="a00203.html">const_accessor</a>;
+00364 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00203.html">const_accessor</a>;
+00365 <span class="keyword">class </span><a class="code" href="a00202.html">accessor</a>;
+00366
+00367 <span class="keyword">typedef</span> Key key_type;
+00368 <span class="keyword">typedef</span> T mapped_type;
+00369 <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
+00370 <span class="keyword">typedef</span> size_t size_type;
+00371 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00372 <span class="keyword">typedef</span> value_type *pointer;
+00373 <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
+00374 <span class="keyword">typedef</span> value_type &reference;
+00375 <span class="keyword">typedef</span> <span class="keyword">const</span> value_type &const_reference;
+00376 <span class="keyword">typedef</span> <a class="code" href="a00223.html">internal::hash_map_iterator<concurrent_hash_map,value_type></a> <a class="code" href="a00223.html">iterator</a>;
+00377 <span class="keyword">typedef</span> <a class="code" href="a00223.html">internal::hash_map_iterator<concurrent_hash_map,const value_type></a> <a class="code" href="a00223.html">const_iterator</a>;
+00378 <span class="keyword">typedef</span> <a class="code" href="a00224.html">internal::hash_map_range<iterator></a> <a class="code" href="a00224.html">range_type</a>;
+00379 <span class="keyword">typedef</span> <a class="code" href="a00224.html">internal::hash_map_range<const_iterator></a> <a class="code" href="a00224.html">const_range_type</a>;
+00380 <span class="keyword">typedef</span> A allocator_type;
+00381
+<a name="l00383"></a><a class="code" href="a00203.html">00383</a> <span class="keyword">class </span><a class="code" href="a00203.html">const_accessor</a> {
+00384 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00201.html">concurrent_hash_map</a><Key,T,HashCompare,A>;
+00385 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00202.html">accessor</a>;
+00386 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00202.html">accessor</a>& ) <span class="keyword">const</span>; <span class="comment">// Deny access</span>
+00387 <a class="code" href="a00203.html">const_accessor</a>( <span class="keyword">const</span> <a class="code" href="a00202.html">accessor</a>& ); <span class="comment">// Deny access</span>
+00388 <span class="keyword">public</span>:
+<a name="l00390"></a><a class="code" href="a00203.html#w0">00390</a> <span class="keyword">typedef</span> <span class="keyword">const</span> std::pair<const Key,T> value_type;
+00391
+<a name="l00393"></a><a class="code" href="a00203.html#a0">00393</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_node;}
+00394
+<a name="l00396"></a><a class="code" href="a00203.html#a1">00396</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {
+00397 <span class="keywordflow">if</span>( my_node ) {
+00398 my_lock.release();
+00399 my_node = NULL;
+00400 }
+00401 }
+00402
+<a name="l00404"></a><a class="code" href="a00203.html#a2">00404</a> const_reference operator*()<span class="keyword"> const </span>{
+00405 __TBB_ASSERT( my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+00406 <span class="keywordflow">return</span> my_node->item;
+00407 }
+00408
+<a name="l00410"></a><a class="code" href="a00203.html#a3">00410</a> const_pointer operator->()<span class="keyword"> const </span>{
+00411 <span class="keywordflow">return</span> &operator*();
+00412 }
+00413
+<a name="l00415"></a><a class="code" href="a00203.html#a4">00415</a> <a class="code" href="a00203.html">const_accessor</a>() : my_node(NULL) {}
+00416
+<a name="l00418"></a><a class="code" href="a00203.html#a5">00418</a> ~<a class="code" href="a00203.html">const_accessor</a>() {
+00419 my_node = NULL; <span class="comment">// my_lock.release() is called in scoped_lock destructor</span>
+00420 }
+00421 <span class="keyword">private</span>:
+00422 node* my_node;
+00423 node_mutex_t::scoped_lock my_lock;
+00424 hashcode_t my_hash;
+00425 };
+00426
+<a name="l00428"></a><a class="code" href="a00202.html">00428</a> <span class="keyword">class </span><a class="code" href="a00202.html">accessor</a>: <span class="keyword">public</span> <a class="code" href="a00203.html">const_accessor</a> {
+00429 <span class="keyword">public</span>:
+<a name="l00431"></a><a class="code" href="a00202.html#w0">00431</a> <span class="keyword">typedef</span> std::pair<const Key,T> value_type;
+00432
+<a name="l00434"></a><a class="code" href="a00202.html#a0">00434</a> reference operator*()<span class="keyword"> const </span>{
+00435 __TBB_ASSERT( this->my_node, <span class="stringliteral">"attempt to dereference empty accessor"</span> );
+00436 <span class="keywordflow">return</span> this->my_node->item;
+00437 }
+00438
+<a name="l00440"></a><a class="code" href="a00202.html#a1">00440</a> pointer operator->()<span class="keyword"> const </span>{
+00441 <span class="keywordflow">return</span> &operator*();
+00442 }
+00443 };
+00444
+<a name="l00446"></a><a class="code" href="a00201.html#a0">00446</a> <a class="code" href="a00201.html">concurrent_hash_map</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+00447 : my_allocator(a)
+00448
+00449 {
+00450 initialize();
+00451 }
+00452
+<a name="l00454"></a><a class="code" href="a00201.html#a1">00454</a> <a class="code" href="a00201.html">concurrent_hash_map</a>( <span class="keyword">const</span> <a class="code" href="a00201.html">concurrent_hash_map</a>& table, <span class="keyword">const</span> allocator_type &a = allocator_type())
+00455 : my_allocator(a)
+00456 {
+00457 initialize();
+00458 internal_copy(table);
+00459 }
+00460
+00462 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00463"></a><a class="code" href="a00201.html#a2">00463</a> <a class="code" href="a00201.html">concurrent_hash_map</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+00464 : my_allocator(a)
+00465 {
+00466 initialize();
+00467 internal_copy(first, last);
+00468 }
+00469
+<a name="l00471"></a><a class="code" href="a00201.html#a3">00471</a> <a class="code" href="a00201.html">concurrent_hash_map</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00201.html">concurrent_hash_map</a>& table ) {
+00472 <span class="keywordflow">if</span>( <span class="keyword">this</span>!=&table ) {
+00473 clear();
+00474 internal_copy(table);
+00475 }
+00476 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00477 }
+00478
+00479
+00481 <span class="keywordtype">void</span> clear();
+00482
+00484 ~<a class="code" href="a00201.html">concurrent_hash_map</a>();
+00485
+00486 <span class="comment">//------------------------------------------------------------------------</span>
+00487 <span class="comment">// Parallel algorithm support</span>
+00488 <span class="comment">//------------------------------------------------------------------------</span>
+00489 range_type range( size_type grainsize=1 ) {
+00490 <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+00491 }
+00492 const_range_type range( size_type grainsize=1 )<span class="keyword"> const </span>{
+00493 <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+00494 }
+00495
+00496 <span class="comment">//------------------------------------------------------------------------</span>
+00497 <span class="comment">// STL support - not thread-safe methods</span>
+00498 <span class="comment">//------------------------------------------------------------------------</span>
+00499 iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,0);}
+00500 iterator end() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>,n_segment);}
+00501 const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,0);}
+00502 const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>,n_segment);}
+00503 std::pair<iterator, iterator> equal_range( <span class="keyword">const</span> Key& key ) { <span class="keywordflow">return</span> internal_equal_range(key, end()); }
+00504 std::pair<const_iterator, const_iterator> equal_range( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal_equal_range(key, end()); }
+00505
+00507
+00509 size_type size() <span class="keyword">const</span>;
+00510
+00512 <span class="keywordtype">bool</span> empty() <span class="keyword">const</span>;
+00513
+<a name="l00515"></a><a class="code" href="a00201.html#a16">00515</a> size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(node);}
+00516
+<a name="l00518"></a><a class="code" href="a00201.html#a17">00518</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+00519
+00521 <span class="keywordtype">void</span> swap(<a class="code" href="a00201.html">concurrent_hash_map</a> &table);
+00522
+00523 <span class="comment">//------------------------------------------------------------------------</span>
+00524 <span class="comment">// concurrent map operations</span>
+00525 <span class="comment">//------------------------------------------------------------------------</span>
+00526
+<a name="l00528"></a><a class="code" href="a00201.html#a19">00528</a> size_type count( <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
+00529 <span class="keywordflow">return</span> const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)-><a class="code" href="a00201.html#d7">lookup</a><<span class="comment">/*insert*/</span><span class="keyword">false</span>>(NULL, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
+00530 }
+00531
+00533
+<a name="l00534"></a><a class="code" href="a00201.html#a20">00534</a> <span class="keywordtype">bool</span> find( <a class="code" href="a00203.html">const_accessor</a>& result, <span class="keyword">const</span> Key& key )<span class="keyword"> const </span>{
+00535 <span class="keywordflow">return</span> const_cast<concurrent_hash_map*>(<span class="keyword">this</span>)-><a class="code" href="a00201.html#d7">lookup</a><<span class="comment">/*insert*/</span><span class="keyword">false</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
+00536 }
+00537
+00539
+<a name="l00540"></a><a class="code" href="a00201.html#a21">00540</a> <span class="keywordtype">bool</span> find( <a class="code" href="a00202.html">accessor</a>& result, <span class="keyword">const</span> Key& key ) {
+00541 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">false</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">true</span>, NULL );
+00542 }
+00543
+00545
+<a name="l00546"></a><a class="code" href="a00201.html#a22">00546</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00203.html">const_accessor</a>& result, <span class="keyword">const</span> Key& key ) {
+00547 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">false</span>, NULL );
+00548 }
+00549
+00551
+<a name="l00552"></a><a class="code" href="a00201.html#a23">00552</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00202.html">accessor</a>& result, <span class="keyword">const</span> Key& key ) {
+00553 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, key, <span class="comment">/*write=*/</span><span class="keyword">true</span>, NULL );
+00554 }
+00555
+00557
+<a name="l00558"></a><a class="code" href="a00201.html#a24">00558</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00203.html">const_accessor</a>& result, <span class="keyword">const</span> value_type& value ) {
+00559 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, value.first, <span class="comment">/*write=*/</span><span class="keyword">false</span>, &value.second );
+00560 }
+00561
+00563
+<a name="l00564"></a><a class="code" href="a00201.html#a25">00564</a> <span class="keywordtype">bool</span> insert( <a class="code" href="a00202.html">accessor</a>& result, <span class="keyword">const</span> value_type& value ) {
+00565 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(&result, value.first, <span class="comment">/*write=*/</span><span class="keyword">true</span>, &value.second );
+00566 }
+00567
+00569
+<a name="l00570"></a><a class="code" href="a00201.html#a26">00570</a> <span class="keywordtype">bool</span> insert( <span class="keyword">const</span> value_type& value ) {
+00571 <span class="keywordflow">return</span> lookup<<span class="comment">/*insert*/</span><span class="keyword">true</span>>(NULL, value.first, <span class="comment">/*write=*/</span><span class="keyword">false</span>, &value.second );
+00572 }
+00573
+00575 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+<a name="l00576"></a><a class="code" href="a00201.html#a27">00576</a> <span class="keywordtype">void</span> insert(I first, I last) {
+00577 <span class="keywordflow">for</span>(; first != last; ++first)
+00578 insert( *first );
+00579 }
+00580
+00582
+00583 <span class="keywordtype">bool</span> erase( <span class="keyword">const</span> Key& key );
+00584
+00586
+<a name="l00587"></a><a class="code" href="a00201.html#a29">00587</a> <span class="keywordtype">bool</span> erase( <a class="code" href="a00203.html">const_accessor</a>& item_accessor ) {
+00588 <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">true</span> );
+00589 }
+00590
+00592
+<a name="l00593"></a><a class="code" href="a00201.html#a30">00593</a> <span class="keywordtype">bool</span> erase( <a class="code" href="a00202.html">accessor</a>& item_accessor ) {
+00594 <span class="keywordflow">return</span> exclude( item_accessor, <span class="comment">/*readonly=*/</span> <span class="keyword">false</span> );
+00595 }
+00596
+00597 <span class="keyword">private</span>:
+00599 <span class="keyword">struct </span>node: internal::no_copy {
+00601 node* next;
+00602 node_mutex_t <a class="code" href="a00227.html">mutex</a>;
+00603 value_type item;
+00604 node( <span class="keyword">const</span> Key& key ) : item(key, T()) {}
+00605 node( <span class="keyword">const</span> Key& key, <span class="keyword">const</span> T& t ) : item(key, t) {}
+00606 <span class="comment">// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17</span>
+00607 <span class="keywordtype">void</span>* operator new( size_t <span class="comment">/*size*/</span>, node_allocator_type& a ) {
+00608 <span class="keywordtype">void</span> *ptr = a.allocate(1);
+00609 <span class="keywordflow">if</span>(!ptr) <span class="keywordflow">throw</span> std::bad_alloc();
+00610 <span class="keywordflow">return</span> ptr;
+00611 }
+00612 <span class="comment">// match placement-new form above to be called if exception thrown in constructor</span>
+00613 <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr, node_allocator_type& a ) {<span class="keywordflow">return</span> a.deallocate(static_cast<node*>(ptr),1); }
+00614 };
+00615
+00616 <span class="keyword">struct </span>chain;
+00617 <span class="keyword">friend</span> <span class="keyword">struct </span>chain;
+00618
+00620
+00621 <span class="keyword">struct </span>chain {
+00622 <span class="keywordtype">void</span> push_front( node& b ) {
+00623 b.next = node_list;
+00624 node_list = &b;
+00625 }
+00626 chain_mutex_t mutex;
+00627 node* node_list;
+00628 };
+00629
+00630 <span class="keyword">struct </span>segment;
+00631 <span class="keyword">friend</span> <span class="keyword">struct </span>segment;
+00632
+00634
+00636 <span class="keyword">struct </span>segment: internal::hash_map_segment_base {
+00637 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00638 <span class="preprocessor"></span> ~segment() {
+00639 __TBB_ASSERT( !my_array, <span class="stringliteral">"should have been cleared earlier"</span> );
+00640 }
+00641 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00642
+00643 <span class="comment">// Pointer to array of chains</span>
+00644 chain* my_array;
+00645
+00646 <span class="comment">// Get chain in this segment that corresponds to given hash code.</span>
+00647 chain& get_chain( hashcode_t hashcode, size_t n_segment_bits ) {
+00648 <span class="keywordflow">return</span> my_array[(hashcode>>n_segment_bits)&(my_physical_size-1)];
+00649 }
+00650
+00652
+00654 <span class="keywordtype">void</span> allocate_array( size_t new_size ) {
+00655 size_t n=(internal::NFS_GetLineSize()+<span class="keyword">sizeof</span>(chain)-1)/<span class="keyword">sizeof</span>(chain);
+00656 __TBB_ASSERT((n&(n-1))==0, NULL);
+00657 <span class="keywordflow">while</span>( n<new_size ) n<<=1;
+00658 chain* array = cache_aligned_allocator<chain>().allocate( n );
+00659 <span class="comment">// storing earlier might help overcome false positives of in deducing "bool grow" in concurrent threads</span>
+00660 __TBB_store_with_release(my_physical_size, n);
+00661 std::memset( array, 0, n*<span class="keyword">sizeof</span>(chain) );
+00662 my_array = array;
+00663 }
+00664 };
+00665
+00666 segment& get_segment( hashcode_t hashcode ) {
+00667 <span class="keywordflow">return</span> my_segment[hashcode&(n_segment-1)];
+00668 }
+00669
+00670 node_allocator_type my_allocator;
+00671
+00672 HashCompare my_hash_compare;
+00673
+00674 segment* my_segment;
+00675
+00676 node* create_node(<span class="keyword">const</span> Key& key, <span class="keyword">const</span> T* t) {
+00677 <span class="comment">// exception-safe allocation and construction</span>
+00678 <span class="keywordflow">if</span>(t) <span class="keywordflow">return</span> <span class="keyword">new</span>( my_allocator ) node(key, *t);
+00679 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">new</span>( my_allocator ) node(key);
+00680 }
+00681
+00682 <span class="keywordtype">void</span> delete_node(node* b) {
+00683 my_allocator.destroy(b);
+00684 my_allocator.deallocate(b, 1);
+00685 }
+00686
+00687 node* search_list( <span class="keyword">const</span> Key& key, chain& c )<span class="keyword"> const </span>{
+00688 node* b = c.node_list;
+00689 <span class="keywordflow">while</span>( b && !my_hash_compare.equal(key, b->item.first) )
+00690 b = b->next;
+00691 <span class="keywordflow">return</span> b;
+00692 }
+00694 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00695 std::pair<I, I> internal_equal_range( <span class="keyword">const</span> Key& key, I end ) <span class="keyword">const</span>;
+00696
+00698 <span class="keywordtype">bool</span> exclude( const_accessor& item_accessor, <span class="keywordtype">bool</span> readonly );
+00699
+00701 <span class="keywordtype">void</span> grow_segment( segment_mutex_t::scoped_lock& segment_lock, segment& s );
+00702
+00704 <span class="keyword">template</span><<span class="keywordtype">bool</span> op_insert>
+00705 <span class="keywordtype">bool</span> lookup( const_accessor* result, <span class="keyword">const</span> Key& key, <span class="keywordtype">bool</span> write, <span class="keyword">const</span> T* t );
+00706
+00708 <span class="keywordtype">void</span> initialize() {
+00709 my_segment = cache_aligned_allocator<segment>().allocate(n_segment);
+00710 std::memset( my_segment, 0, <span class="keyword">sizeof</span>(segment)*n_segment );
+00711 }
+00712
+00714 <span class="keywordtype">void</span> internal_copy( <span class="keyword">const</span> concurrent_hash_map& source );
+00715
+00716 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00717 <span class="keywordtype">void</span> internal_copy(I first, I last);
+00718 };
+00719
+00720 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00721"></a><a class="code" href="a00201.html#a5">00721</a> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::~concurrent_hash_map</a>() {
+00722 <a class="code" href="a00201.html#a4">clear</a>();
+00723 <a class="code" href="a00198.html">cache_aligned_allocator<segment></a>().deallocate( my_segment, n_segment );
+00724 }
+00725
+00726 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00727"></a><a class="code" href="a00201.html#a14">00727</a> <span class="keyword">typename</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A></a>::size_type <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::size</a>()<span class="keyword"> const </span>{
+00728 size_type result = 0;
+00729 <span class="keywordflow">for</span>( size_t k=0; k<n_segment; ++k )
+00730 result += my_segment[k].my_logical_size;
+00731 <span class="keywordflow">return</span> result;
+00732 }
+00733
+00734 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00735"></a><a class="code" href="a00201.html#a15">00735</a> <span class="keywordtype">bool</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::empty</a>()<span class="keyword"> const </span>{
+00736 <span class="keywordflow">for</span>( size_t k=0; k<n_segment; ++k )
+00737 <span class="keywordflow">if</span>( my_segment[k].my_logical_size )
+00738 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00739 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00740 }
+00741
+00742 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00743 <span class="preprocessor"></span> <span class="comment">// Suppress "conditional expression is constant" warning.</span>
+00744 <span class="preprocessor"> #pragma warning( push )</span>
+00745 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning( disable: 4127 )</span>
+00746 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00747 <span class="preprocessor"></span>
+00748 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00749 <span class="keyword">template</span><<span class="keywordtype">bool</span> op_insert>
+00750 <span class="keywordtype">bool</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::lookup</a>( const_accessor* result, <span class="keyword">const</span> Key& key, <span class="keywordtype">bool</span> write, <span class="keyword">const</span> T* t ) {
+00751 <span class="keywordflow">if</span>( result )
+00752 result->release();
+00753 <span class="keyword">const</span> hashcode_t h = my_hash_compare.hash( key );
+00754 segment& s = get_segment(h);
+00755 restart:
+00756 <span class="keywordtype">bool</span> return_value = <span class="keyword">false</span>;
+00757 <span class="comment">// first check in double-check sequence</span>
+00758 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00759 <span class="preprocessor"></span> <span class="keywordtype">bool</span> grow = op_insert && s.internal_grow_predicate();
+00760 <span class="preprocessor">#else</span>
+00761 <span class="preprocessor"></span> <span class="keywordtype">bool</span> grow = op_insert && s.my_logical_size >= s.my_physical_size
+00762 && s.my_physical_size < max_physical_size; <span class="comment">// check whether there are free bits</span>
+00763 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+00764 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span>grow );
+00765 <span class="keywordflow">if</span>( grow ) { <span class="comment">// Load factor is too high </span>
+00766 grow_segment( segment_lock, s );
+00767 }
+00768 <span class="keywordflow">if</span>( !s.my_array ) {
+00769 __TBB_ASSERT( !op_insert, NULL );
+00770 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00771 }
+00772 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
+00773 chain& c = s.get_chain( h, n_segment_bits );
+00774 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+00775
+00776 node* b = search_list( key, c );
+00777 <span class="keywordflow">if</span>( op_insert ) {
+00778 <span class="keywordflow">if</span>( !b ) {
+00779 b = create_node(key, t);
+00780 <span class="comment">// Search failed</span>
+00781 <span class="keywordflow">if</span>( !chain_lock.upgrade_to_writer() ) {
+00782 <span class="comment">// Rerun search_list, in case another thread inserted the item during the upgrade.</span>
+00783 node* b_temp = search_list( key, c );
+00784 <span class="keywordflow">if</span>( b_temp ) { <span class="comment">// unfortunately, it did</span>
+00785 chain_lock.downgrade_to_reader();
+00786 delete_node( b );
+00787 b = b_temp;
+00788 <span class="keywordflow">goto</span> done;
+00789 }
+00790 }
+00791 ++s.my_logical_size; <span class="comment">// we can't change it earlier due to correctness of size() and exception safety of equal()</span>
+00792 return_value = <span class="keyword">true</span>;
+00793 c.push_front( *b );
+00794 }
+00795 } <span class="keywordflow">else</span> { <span class="comment">// find or count</span>
+00796 <span class="keywordflow">if</span>( !b ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00797 return_value = <span class="keyword">true</span>;
+00798 }
+00799 done:
+00800 <span class="keywordflow">if</span>( !result ) <span class="keywordflow">return</span> return_value;
+00801 <span class="keywordflow">if</span>( !result->my_lock.try_acquire( b->mutex, write ) ) {
+00802 <span class="comment">// we are unlucky, prepare for longer wait</span>
+00803 internal::AtomicBackoff trials;
+00804 <span class="keywordflow">do</span> {
+00805 <span class="keywordflow">if</span>( !trials.bounded_pause() ) {
+00806 <span class="comment">// the wait takes really long, restart the operation</span>
+00807 chain_lock.release(); segment_lock.release();
+00808 __TBB_Yield();
+00809 <span class="keywordflow">goto</span> restart;
+00810 }
+00811 } <span class="keywordflow">while</span>( !result->my_lock.try_acquire( b->mutex, write ) );
+00812 }
+00813 result->my_node = b;
+00814 result->my_hash = h;
+00815 <span class="keywordflow">return</span> return_value;
+00816 }
+00817
+00818 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00819 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning( pop )</span>
+00820 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4127 is back</span>
+00821 <span class="preprocessor"></span>
+00822 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00823 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00824 std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( <span class="keyword">const</span> Key& key, I end )<span class="keyword"> const </span>{
+00825 <a class="code" href="a00222.html#w3">hashcode_t</a> h = my_hash_compare.hash( key );
+00826 size_t segment_index = h&(<a class="code" href="a00222.html#s1">n_segment</a>-1);
+00827 segment& s = my_segment[segment_index ];
+00828 size_t chain_index = (h>>n_segment_bits)&(s.my_physical_size-1);
+00829 <span class="keywordflow">if</span>( !s.my_array )
+00830 <span class="keywordflow">return</span> std::make_pair(end, end);
+00831 chain& c = s.my_array[chain_index];
+00832 node* b = search_list( key, c );
+00833 <span class="keywordflow">if</span>( !b )
+00834 <span class="keywordflow">return</span> std::make_pair(end, end);
+00835 iterator lower(*<span class="keyword">this</span>, segment_index, chain_index, b), upper(lower);
+00836 <span class="keywordflow">return</span> std::make_pair(lower, ++upper);
+00837 }
+00838
+00839 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00840"></a><a class="code" href="a00201.html#a28">00840</a> <span class="keywordtype">bool</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::erase</a>( <span class="keyword">const</span> Key &key ) {
+00841 hashcode_t h = my_hash_compare.hash( key );
+00842 segment& s = get_segment( h );
+00843 node* b=NULL; <span class="comment">// explicitly initialized to prevent compiler warnings</span>
+00844 {
+00845 <span class="keywordtype">bool</span> chain_locked_for_write = <span class="keyword">false</span>;
+00846 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+00847 <span class="keywordflow">if</span>( !s.my_array ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00848 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
+00849 chain& c = s.get_chain( h, n_segment_bits );
+00850 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+00851 search:
+00852 node** p = &c.node_list;
+00853 b = *p;
+00854 <span class="keywordflow">while</span>( b && !my_hash_compare.equal(key, b->item.first ) ) {
+00855 p = &b->next;
+00856 b = *p;
+00857 }
+00858 <span class="keywordflow">if</span>( !b ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00859 <span class="keywordflow">if</span>( !chain_locked_for_write && !chain_lock.upgrade_to_writer() ) {
+00860 chain_locked_for_write = <span class="keyword">true</span>;
+00861 <span class="keywordflow">goto</span> search;
+00862 }
+00863 *p = b->next;
+00864 --s.my_logical_size;
+00865 }
+00866 {
+00867 node_mutex_t::scoped_lock item_locker( b->mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+00868 }
+00869 <span class="comment">// note: there should be no threads pretending to acquire this mutex again, do not try to upgrade const_accessor!</span>
+00870 delete_node( b ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
+00871 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00872 }
+00873
+00874 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00875 <span class="keywordtype">bool</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::exclude</a>( const_accessor &item_accessor, <span class="keywordtype">bool</span> readonly ) {
+00876 __TBB_ASSERT( item_accessor.my_node, NULL );
+00877 <span class="keyword">const</span> hashcode_t h = item_accessor.my_hash;
+00878 node *<span class="keyword">const</span> b = item_accessor.my_node;
+00879 item_accessor.my_node = NULL; <span class="comment">// we ought release accessor anyway</span>
+00880 segment& s = get_segment( h );
+00881 {
+00882 segment_mutex_t::scoped_lock segment_lock( s.my_mutex, <span class="comment">/*write=*/</span><span class="keyword">false</span> );
+00883 __TBB_ASSERT( s.my_array, NULL );
+00884 __TBB_ASSERT( (s.my_physical_size&(s.my_physical_size-1))==0, NULL );
+00885 chain& c = s.get_chain( h, n_segment_bits );
+00886 chain_mutex_t::scoped_lock chain_lock( c.mutex, <span class="comment">/*write=*/</span><span class="keyword">true</span> );
+00887 node** p = &c.node_list;
+00888 <span class="keywordflow">while</span>( *p && *p != b )
+00889 p = &(*p)->next;
+00890 <span class="keywordflow">if</span>( !*p ) { <span class="comment">// someone else was the first</span>
+00891 item_accessor.my_lock.release();
+00892 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00893 }
+00894 __TBB_ASSERT( *p == b, NULL );
+00895 *p = b->next;
+00896 --s.my_logical_size;
+00897 }
+00898 <span class="keywordflow">if</span>( readonly ) <span class="comment">// need to get exclusive lock</span>
+00899 item_accessor.my_lock.upgrade_to_writer(); <span class="comment">// return value means nothing here</span>
+00900 item_accessor.my_lock.release();
+00901 delete_node( b ); <span class="comment">// Only one thread can delete it due to write lock on the chain_mutex</span>
+00902 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00903 }
+00904
+00905 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00906"></a><a class="code" href="a00201.html#a18">00906</a> <span class="keywordtype">void</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::swap</a>(<a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A></a> &table) {
+00907 std::swap(this->my_allocator, table.<a class="code" href="a00201.html#r0">my_allocator</a>);
+00908 std::swap(this->my_hash_compare, table.<a class="code" href="a00201.html#r1">my_hash_compare</a>);
+00909 std::swap(this->my_segment, table.<a class="code" href="a00201.html#r2">my_segment</a>);
+00910 }
+00911
+00912 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+<a name="l00913"></a><a class="code" href="a00201.html#a4">00913</a> <span class="keywordtype">void</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::clear</a>() {
+00914 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+00915 <span class="preprocessor"></span> size_t total_physical_size = 0, min_physical_size = size_t(-1L), max_physical_size = 0; <span class="comment">//< usage statistics</span>
+00916 <span class="keyword">static</span> <span class="keywordtype">bool</span> reported = <span class="keyword">false</span>;
+00917 <span class="preprocessor">#endif</span>
+00918 <span class="preprocessor"></span> <span class="keywordflow">for</span>( size_t i=0; i<n_segment; ++i ) {
+00919 segment& s = my_segment[i];
+00920 size_t n = s.my_physical_size;
+00921 <span class="keywordflow">if</span>( chain* array = s.my_array ) {
+00922 s.my_array = NULL;
+00923 s.my_physical_size = 0;
+00924 s.my_logical_size = 0;
+00925 <span class="keywordflow">for</span>( size_t j=0; j<n; ++j ) {
+00926 <span class="keywordflow">while</span>( node* b = array[j].node_list ) {
+00927 array[j].node_list = b->next;
+00928 delete_node(b);
+00929 }
+00930 }
+00931 <a class="code" href="a00198.html">cache_aligned_allocator<chain></a>().deallocate( array, n );
+00932 }
+00933 <span class="preprocessor">#if TBB_USE_PERFORMANCE_WARNINGS</span>
+00934 <span class="preprocessor"></span> total_physical_size += n;
+00935 <span class="keywordflow">if</span>(min_physical_size > n) min_physical_size = n;
+00936 <span class="keywordflow">if</span>(max_physical_size < n) max_physical_size = n;
+00937 }
+00938 <span class="keywordflow">if</span>( !reported
+00939 && ( (total_physical_size >= n_segment*48 && min_physical_size < total_physical_size/n_segment/2)
+00940 || (total_physical_size >= n_segment*128 && max_physical_size > total_physical_size/n_segment*2) ) )
+00941 {
+00942 reported = <span class="keyword">true</span>;
+00943 internal::runtime_warning(
+00944 <span class="stringliteral">"Performance is not optimal because the hash function produces bad randomness in lower bits in %s"</span>,
+00945 <span class="keyword">typeid</span>(*this).name() );
+00946 <span class="preprocessor">#endif</span>
+00947 <span class="preprocessor"></span> }
+00948 }
+00949
+00950 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00951 <span class="keywordtype">void</span> <a class="code" href="a00201.html">concurrent_hash_map<Key,T,HashCompare,A>::grow_segment</a>( segment_mutex_t::scoped_lock& segment_lock, segment& s ) {
+00952 <span class="comment">// Following is second check in a double-check.</span>
+00953 <span class="keywordflow">if</span>( s.my_logical_size >= s.my_physical_size ) {
+00954 chain* old_array = s.my_array;
+00955 size_t old_size = s.my_physical_size;
+00956 s.allocate_array( s.my_logical_size+1 );
+00957 <span class="keywordflow">for</span>( size_t k=0; k<old_size; ++k )
+00958 <span class="keywordflow">while</span>( node* b = old_array[k].node_list ) {
+00959 old_array[k].node_list = b->next;
+00960 hashcode_t h = my_hash_compare.hash( b->item.first );
+00961 __TBB_ASSERT( &get_segment(h)==&s, <span class="stringliteral">"hash function changed?"</span> );
+00962 s.get_chain(h,n_segment_bits).push_front(*b);
+00963 }
+00964 cache_aligned_allocator<chain>().deallocate( old_array, old_size );
+00965 }
+00966 segment_lock.downgrade_to_reader();
+00967 }
+00968
+00969 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00970 <span class="keywordtype">void</span> concurrent_hash_map<Key,T,HashCompare,A>::internal_copy( <span class="keyword">const</span> concurrent_hash_map& source ) {
+00971 <span class="keywordflow">for</span>( size_t i=0; i<n_segment; ++i ) {
+00972 segment& s = source.my_segment[i];
+00973 __TBB_ASSERT( !my_segment[i].my_array, <span class="stringliteral">"caller should have cleared"</span> );
+00974 <span class="keywordflow">if</span>( s.my_logical_size ) {
+00975 segment& d = my_segment[i];
+00976 d.allocate_array( s.my_logical_size );
+00977 d.my_logical_size = s.my_logical_size;
+00978 size_t s_size = s.my_physical_size;
+00979 chain* s_array = s.my_array;
+00980 chain* d_array = d.my_array;
+00981 <span class="keywordflow">for</span>( size_t k=0; k<s_size; ++k )
+00982 <span class="keywordflow">for</span>( node* b = s_array[k].node_list; b; b=b->next ) {
+00983 __TBB_ASSERT( &get_segment(my_hash_compare.hash( b->item.first ))==&d, <span class="stringliteral">"hash function changed?"</span> );
+00984 node* b_new = create_node(b->item.first, &b->item.second);
+00985 d_array[k].push_front(*b_new); <span class="comment">// hashcode is the same and segment and my_physical sizes are the same</span>
+00986 }
+00987 }
+00988 }
+00989 }
+00990
+00991 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+00992 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00993 <span class="keywordtype">void</span> concurrent_hash_map<Key,T,HashCompare,A>::internal_copy(I first, I last) {
+00994 <span class="keywordflow">for</span>(; first != last; ++first)
+00995 <a class="code" href="a00201.html#a22">insert</a>( *first );
+00996 }
+00997
+00998 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2>
+00999 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A1> &a, <span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A2> &b) {
+01000 <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01001 <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A1>::const_iterator i(a.begin()), i_end(a.end());
+01002 <span class="keyword">typename</span> concurrent_hash_map<Key, T, HashCompare, A2>::const_iterator j, j_end(b.end());
+01003 <span class="keywordflow">for</span>(; i != i_end; ++i) {
+01004 j = b.equal_range(i->first).first;
+01005 <span class="keywordflow">if</span>( j == j_end || !(i->second == j->second) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01006 }
+01007 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+01008 }
+01009
+01010 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2>
+01011 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A1> &a, <span class="keyword">const</span> concurrent_hash_map<Key, T, HashCompare, A2> &b)
+01012 { <span class="keywordflow">return</span> !(a == b); }
+01013
+01014 <span class="keyword">template</span><<span class="keyword">typename</span> Key, <span class="keyword">typename</span> T, <span class="keyword">typename</span> HashCompare, <span class="keyword">typename</span> A>
+01015 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_hash_map<Key, T, HashCompare, A> &a, concurrent_hash_map<Key, T, HashCompare, A> &b)
+01016 { a.swap( b ); }
+01017
+01018 } <span class="comment">// namespace tbb</span>
+01019
+01020 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_hash_map_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00330.html b/doc/html/a00330.html
new file mode 100644
index 0000000..21ceca2
--- /dev/null
+++ b/doc/html/a00330.html
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_queue.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>concurrent_queue.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_concurrent_queue_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_queue_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00025 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+00026 <span class="preprocessor">#include <iterator></span>
+00027 <span class="preprocessor">#include <new></span>
+00028
+00029 <span class="keyword">namespace </span>tbb {
+00030
+00031 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
+00032 <span class="keyword">class </span>concurrent_queue;
+00033
+00035 <span class="keyword">namespace </span>internal {
+00036
+00037 <span class="keyword">class </span>concurrent_queue_rep;
+00038 <span class="keyword">class </span>concurrent_queue_iterator_rep;
+00039 <span class="keyword">class </span>concurrent_queue_iterator_base_v3;
+00040 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">class </span>concurrent_queue_iterator;
+00041
+00043
+<a name="l00045"></a><a class="code" href="a00205.html">00045</a> <span class="keyword">class </span><a class="code" href="a00205.html">concurrent_queue_base_v3</a>: <a class="code" href="a00230.html">no_copy</a> {
+00047 concurrent_queue_rep* my_rep;
+00048
+00049 <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_rep;
+00050 <span class="keyword">friend</span> <span class="keyword">struct </span>micro_queue;
+00051 <span class="keyword">friend</span> <span class="keyword">class </span>micro_queue_pop_finalizer;
+00052 <span class="keyword">friend</span> <span class="keyword">class </span>concurrent_queue_iterator_rep;
+00053 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>;
+00054 <span class="keyword">protected</span>:
+<a name="l00056"></a><a class="code" href="a00206.html">00056</a> <span class="keyword">struct </span><a class="code" href="a00206.html">page</a> {
+00057 <a class="code" href="a00206.html">page</a>* next;
+00058 <a class="code" href="a00319.html#a21">uintptr</a> mask;
+00059 };
+00060
+<a name="l00062"></a><a class="code" href="a00205.html#p0">00062</a> ptrdiff_t my_capacity;
+00063
+<a name="l00065"></a><a class="code" href="a00205.html#p1">00065</a> size_t items_per_page;
+00066
+<a name="l00068"></a><a class="code" href="a00205.html#p2">00068</a> size_t item_size;
+00069
+00070 <span class="keyword">private</span>:
+00071 <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( <a class="code" href="a00206.html">page</a>& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) = 0;
+00072 <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, <a class="code" href="a00206.html">page</a>& src, size_t index ) = 0;
+00073 <span class="keyword">protected</span>:
+00074 __TBB_EXPORTED_METHOD <a class="code" href="a00205.html">concurrent_queue_base_v3</a>( size_t item_size );
+00075 <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~<a class="code" href="a00205.html">concurrent_queue_base_v3</a>();
+00076
+00078 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_push( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+00079
+00081 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_pop( <span class="keywordtype">void</span>* dst );
+00082
+00084 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_push_if_not_full( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+00085
+00087
+00088 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_pop_if_present( <span class="keywordtype">void</span>* dst );
+00089
+00091 ptrdiff_t __TBB_EXPORTED_METHOD internal_size() <span class="keyword">const</span>;
+00092
+00094 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+00095
+00097 <span class="keyword">virtual</span> <a class="code" href="a00206.html">page</a> *allocate_page() = 0;
+00098
+00100 <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( <a class="code" href="a00206.html">page</a> *p ) = 0;
+00101
+00103 <span class="comment">/* note that the name may be misleading, but it remains so due to a historical accident. */</span>
+00104 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_finish_clear() ;
+00105
+00107 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception() <span class="keyword">const</span>;
+00108
+00110 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> <a class="code" href="a00205.html">concurrent_queue_base_v3</a>& src ) ;
+00111
+00112 <span class="keyword">private</span>:
+00113 <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( <a class="code" href="a00206.html">page</a>& dst, size_t dindex, <span class="keyword">const</span> <a class="code" href="a00206.html">page</a>& src, size_t sindex ) = 0;
+00114 };
+00115
+00116 <span class="keyword">typedef</span> <a class="code" href="a00205.html">concurrent_queue_base_v3</a> <a class="code" href="a00205.html">concurrent_queue_base</a> ;
+00117
+00119
+<a name="l00120"></a><a class="code" href="a00208.html">00120</a> <span class="keyword">class </span><a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a> {
+00122
+00123 concurrent_queue_iterator_rep* my_rep;
+00124
+00125 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00126 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator<C,U></a>& j );
+00127
+00128 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00129 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator<C,U></a>& j );
+00130 <span class="keyword">protected</span>:
+<a name="l00132"></a><a class="code" href="a00208.html#p0">00132</a> <span class="keyword">mutable</span> <span class="keywordtype">void</span>* my_item;
+00133
+<a name="l00135"></a><a class="code" href="a00208.html#b0">00135</a> <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>() : my_rep(NULL), my_item(NULL) {}
+00136
+<a name="l00138"></a><a class="code" href="a00208.html#b1">00138</a> <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>( <span class="keyword">const</span> <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>& i ) : my_rep(NULL), my_item(NULL) {
+00139 assign(i);
+00140 }
+00141
+00143 __TBB_EXPORTED_METHOD <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>( <span class="keyword">const</span> concurrent_queue_base& queue );
+00144
+00146 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD assign( <span class="keyword">const</span> <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>& i );
+00147
+00149 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD advance();
+00150
+00152 __TBB_EXPORTED_METHOD ~<a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>();
+00153 };
+00154
+00155 <span class="keyword">typedef</span> concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
+00156
+00158
+00160 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00161"></a><a class="code" href="a00207.html">00161</a> <span class="keyword">class </span><a class="code" href="a00207.html">concurrent_queue_iterator</a>: <span class="keyword">public</span> concurrent_queue_iterator_base,
+00162 <span class="keyword">public</span> std::iterator<std::forward_iterator_tag,Value> {
+00163 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+00164 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00165 <span class="keyword">friend</span> class ::tbb::concurrent_queue;
+00166 <span class="preprocessor">#else</span>
+00167 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+00168 <span class="preprocessor">#endif </span>
+00169 <span class="preprocessor"></span>
+<a name="l00170"></a><a class="code" href="a00207.html#a0">00170</a> <a class="code" href="a00207.html">concurrent_queue_iterator</a>( <span class="keyword">const</span> concurrent_queue_base& queue ) :
+00171 <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>(queue)
+00172 {
+00173 }
+00174 <span class="keyword">public</span>:
+00175 <a class="code" href="a00207.html">concurrent_queue_iterator</a>() {}
+00176
+<a name="l00179"></a><a class="code" href="a00207.html#a2">00179</a> <a class="code" href="a00207.html">concurrent_queue_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator<Container,typename Container::value_type></a>& other ) :
+00180 <a class="code" href="a00208.html">concurrent_queue_iterator_base_v3</a>(other)
+00181 {}
+00182
+<a name="l00184"></a><a class="code" href="a00207.html#a3">00184</a> <a class="code" href="a00207.html">concurrent_queue_iterator</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00207.html">concurrent_queue_iterator</a>& other ) {
+00185 assign(other);
+00186 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00187 }
+00188
+<a name="l00190"></a><a class="code" href="a00207.html#a4">00190</a> Value& operator*()<span class="keyword"> const </span>{
+00191 <span class="keywordflow">return</span> *static_cast<Value*>(my_item);
+00192 }
+00193
+00194 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+00195
+<a name="l00197"></a><a class="code" href="a00207.html#a6">00197</a> <a class="code" href="a00207.html">concurrent_queue_iterator</a>& operator++() {
+00198 advance();
+00199 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00200 }
+00201
+<a name="l00203"></a><a class="code" href="a00207.html#a7">00203</a> Value* operator++(<span class="keywordtype">int</span>) {
+00204 Value* result = &operator*();
+00205 operator++();
+00206 <span class="keywordflow">return</span> result;
+00207 }
+00208 }; <span class="comment">// concurrent_queue_iterator</span>
+00209
+00210
+00211 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00212 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+00213 <span class="keywordflow">return</span> i.<a class="code" href="a00208.html#p0">my_item</a>==j.<a class="code" href="a00208.html#p0">my_item</a>;
+00214 }
+00215
+00216 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00217 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> concurrent_queue_iterator<C,T>& i, <span class="keyword">const</span> concurrent_queue_iterator<C,U>& j ) {
+00218 <span class="keywordflow">return</span> i.<a class="code" href="a00208.html#p0">my_item</a>!=j.<a class="code" href="a00208.html#p0">my_item</a>;
+00219 }
+00220
+00221 } <span class="comment">// namespace internal;</span>
+00222
+00224
+00226
+00229 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00230"></a><a class="code" href="a00204.html">00230</a> <span class="keyword">class </span><a class="code" href="a00204.html">concurrent_queue</a>: <span class="keyword">public</span> internal::concurrent_queue_base_v3 {
+00231 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00207.html">internal::concurrent_queue_iterator</a>;
+00232
+00234 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template rebind<char>::other page_allocator_type;
+00235 page_allocator_type my_allocator;
+00236
+00238 <span class="keyword">class </span>destroyer: internal::no_copy {
+00239 T& my_value;
+00240 <span class="keyword">public</span>:
+00241 destroyer( T& value ) : my_value(value) {}
+00242 ~destroyer() {my_value.~T();}
+00243 };
+00244
+00245 T& get_ref( page& page, size_t index ) {
+00246 __TBB_ASSERT( index<items_per_page, NULL );
+00247 <span class="keywordflow">return</span> static_cast<T*>(static_cast<void*>(&page+1))[index];
+00248 }
+00249
+00250 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page& dst, size_t index, <span class="keyword">const</span> <span class="keywordtype">void</span>* src ) {
+00251 <span class="keyword">new</span>( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
+00252 }
+00253
+00254 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> copy_item( page& dst, size_t dindex, <span class="keyword">const</span> page& src, size_t sindex ) {
+00255 <span class="keyword">new</span>( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+00256 }
+00257
+00258 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> assign_and_destroy_item( <span class="keywordtype">void</span>* dst, page& src, size_t index ) {
+00259 T& from = get_ref(src,index);
+00260 destroyer d(from);
+00261 *static_cast<T*>(dst) = from;
+00262 }
+00263
+00264 <span class="comment">/*overide*/</span> <span class="keyword">virtual</span> page *allocate_page() {
+00265 size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+00266 page *p = reinterpret_cast<page*>(my_allocator.allocate( n ));
+00267 <span class="keywordflow">if</span>( !p ) internal_throw_exception();
+00268 <span class="keywordflow">return</span> p;
+00269 }
+00270
+00271 <span class="comment">/*override*/</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate_page( page *p ) {
+00272 size_t n = <span class="keyword">sizeof</span>(page) + items_per_page*item_size;
+00273 my_allocator.deallocate( reinterpret_cast<char*>(p), n );
+00274 }
+00275
+00276 <span class="keyword">public</span>:
+<a name="l00278"></a><a class="code" href="a00204.html#w0">00278</a> <span class="keyword">typedef</span> T value_type;
+00279
+<a name="l00281"></a><a class="code" href="a00204.html#w1">00281</a> <span class="keyword">typedef</span> A allocator_type;
+00282
+<a name="l00284"></a><a class="code" href="a00204.html#w2">00284</a> <span class="keyword">typedef</span> T& reference;
+00285
+<a name="l00287"></a><a class="code" href="a00204.html#w3">00287</a> <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00288
+00290
+<a name="l00292"></a><a class="code" href="a00204.html#w4">00292</a> <span class="keyword">typedef</span> std::ptrdiff_t size_type;
+00293
+<a name="l00295"></a><a class="code" href="a00204.html#w5">00295</a> <span class="keyword">typedef</span> std::ptrdiff_t difference_type;
+00296
+<a name="l00298"></a><a class="code" href="a00204.html#a0">00298</a> <span class="keyword">explicit</span> <a class="code" href="a00204.html">concurrent_queue</a>(<span class="keyword">const</span> allocator_type &a = allocator_type()) :
+00299 concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+00300 {
+00301 }
+00302
+00304 ~<a class="code" href="a00204.html">concurrent_queue</a>();
+00305
+<a name="l00307"></a><a class="code" href="a00204.html#a2">00307</a> <span class="keywordtype">void</span> push( <span class="keyword">const</span> T& source ) {
+00308 internal_push( &source );
+00309 }
+00310
+00312
+<a name="l00313"></a><a class="code" href="a00204.html#a3">00313</a> <span class="keywordtype">void</span> pop( T& destination ) {
+00314 internal_pop( &destination );
+00315 }
+00316
+00318
+<a name="l00320"></a><a class="code" href="a00204.html#a4">00320</a> <span class="keywordtype">bool</span> push_if_not_full( <span class="keyword">const</span> T& source ) {
+00321 <span class="keywordflow">return</span> internal_push_if_not_full( &source );
+00322 }
+00323
+00325
+<a name="l00327"></a><a class="code" href="a00204.html#a5">00327</a> <span class="keywordtype">bool</span> pop_if_present( T& destination ) {
+00328 <span class="keywordflow">return</span> internal_pop_if_present( &destination );
+00329 }
+00330
+00332
+<a name="l00335"></a><a class="code" href="a00204.html#a6">00335</a> size_type size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_size();}
+00336
+<a name="l00338"></a><a class="code" href="a00204.html#a7">00338</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size()<=0;}
+00339
+<a name="l00341"></a><a class="code" href="a00204.html#a8">00341</a> size_type capacity()<span class="keyword"> const </span>{
+00342 <span class="keywordflow">return</span> my_capacity;
+00343 }
+00344
+00346
+<a name="l00348"></a><a class="code" href="a00204.html#a9">00348</a> <span class="keywordtype">void</span> set_capacity( size_type capacity ) {
+00349 internal_set_capacity( capacity, <span class="keyword">sizeof</span>(T) );
+00350 }
+00351
+<a name="l00353"></a><a class="code" href="a00204.html#a10">00353</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+00354
+00356 <span class="keywordtype">void</span> clear() ;
+00357
+00358 <span class="keyword">typedef</span> <a class="code" href="a00207.html">internal::concurrent_queue_iterator<concurrent_queue,T></a> iterator;
+00359 <span class="keyword">typedef</span> <a class="code" href="a00207.html">internal::concurrent_queue_iterator<concurrent_queue,const T></a> const_iterator;
+00360
+00361 <span class="comment">//------------------------------------------------------------------------</span>
+00362 <span class="comment">// The iterators are intended only for debugging. They are slow and not thread safe.</span>
+00363 <span class="comment">//------------------------------------------------------------------------</span>
+00364 iterator begin() {<span class="keywordflow">return</span> iterator(*<span class="keyword">this</span>);}
+00365 iterator end() {<span class="keywordflow">return</span> iterator();}
+00366 const_iterator begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator(*<span class="keyword">this</span>);}
+00367 const_iterator end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_iterator();}
+00368
+<a name="l00370"></a><a class="code" href="a00204.html#a16">00370</a> <a class="code" href="a00204.html">concurrent_queue</a>( <span class="keyword">const</span> <a class="code" href="a00204.html">concurrent_queue</a>& src, <span class="keyword">const</span> allocator_type &a = allocator_type()) :
+00371 concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+00372 {
+00373 assign( src );
+00374 }
+00375
+00377 <span class="keyword">template</span><<span class="keyword">typename</span> InputIterator>
+<a name="l00378"></a><a class="code" href="a00204.html#a17">00378</a> <a class="code" href="a00204.html">concurrent_queue</a>( InputIterator begin, InputIterator end, <span class="keyword">const</span> allocator_type &a = allocator_type()) :
+00379 concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+00380 {
+00381 <span class="keywordflow">for</span>( ; begin != end; ++begin )
+00382 internal_push_if_not_full(&*begin);
+00383 }
+00384 };
+00385
+00386 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00387"></a><a class="code" href="a00204.html#a1">00387</a> <a class="code" href="a00204.html">concurrent_queue<T,A>::~concurrent_queue</a>() {
+00388 <a class="code" href="a00204.html#a11">clear</a>();
+00389 <a class="code" href="a00205.html#b10">internal_finish_clear</a>();
+00390 }
+00391
+00392 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00393"></a><a class="code" href="a00204.html#a11">00393</a> <span class="keywordtype">void</span> <a class="code" href="a00204.html">concurrent_queue<T,A>::clear</a>() {
+00394 <span class="keywordflow">while</span>( !<a class="code" href="a00204.html#a7">empty</a>() ) {
+00395 T value;
+00396 <a class="code" href="a00205.html#b5">internal_pop_if_present</a>(&value);
+00397 }
+00398 }
+00399
+00400 } <span class="comment">// namespace tbb</span>
+00401
+00402 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_queue_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00331.html b/doc/html/a00331.html
new file mode 100644
index 0000000..a670fb8
--- /dev/null
+++ b/doc/html/a00331.html
@@ -0,0 +1,815 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>concurrent_vector.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>concurrent_vector.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_concurrent_vector_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_concurrent_vector_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00025 <span class="preprocessor">#include <algorithm></span>
+00026 <span class="preprocessor">#include <iterator></span>
+00027 <span class="preprocessor">#include <memory></span>
+00028 <span class="preprocessor">#include <limits></span>
+00029 <span class="preprocessor">#include <new></span>
+00030 <span class="preprocessor">#include <cstring></span>
+00031 <span class="preprocessor">#include "atomic.h"</span>
+00032 <span class="preprocessor">#include "cache_aligned_allocator.h"</span>
+00033 <span class="preprocessor">#include "blocked_range.h"</span>
+00034
+00035 <span class="preprocessor">#include "tbb_machine.h"</span>
+00036
+00037 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+00038 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warnings in /Wp64 mode</span>
+00039 <span class="preprocessor"> #pragma warning (push)</span>
+00040 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4267)</span>
+00041 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00042 <span class="preprocessor"></span>
+00043 <span class="keyword">namespace </span>tbb {
+00044
+00045 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A = cache_aligned_allocator<T> >
+00046 <span class="keyword">class </span>concurrent_vector;
+00047
+00049 <span class="preprocessor">#define __TBB_BAD_ALLOC reinterpret_cast<void*>(63)</span>
+00050 <span class="preprocessor"></span>
+00052 <span class="keyword">namespace </span>internal {
+00053
+00055 <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a42">itt_load_pointer_v3</a>( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+00056
+00058
+<a name="l00059"></a><a class="code" href="a00210.html">00059</a> <span class="keyword">class </span><a class="code" href="a00210.html">concurrent_vector_base_v3</a> {
+00060 <span class="keyword">protected</span>:
+00061
+00062 <span class="comment">// Basic types declarations</span>
+00063 <span class="keyword">typedef</span> size_t segment_index_t;
+00064 <span class="keyword">typedef</span> size_t size_type;
+00065
+00066 <span class="comment">// Using enumerations due to Mac linking problems of static const variables</span>
+00067 <span class="keyword">enum</span> {
+00068 <span class="comment">// Size constants</span>
+00069 default_initial_segments = 1, <span class="comment">// 2 initial items</span>
+00071 <span class="comment"></span> pointers_per_short_table = 3, <span class="comment">// to fit into 8 words of entire structure</span>
+00072 pointers_per_long_table = <span class="keyword">sizeof</span>(segment_index_t) * 8 <span class="comment">// one segment per bit</span>
+00073 };
+00074
+00075 <span class="comment">// Segment pointer. Can be zero-initialized</span>
+00076 <span class="keyword">struct </span>segment_t {
+00077 <span class="keywordtype">void</span>* array;
+00078 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00079 <span class="preprocessor"></span> ~segment_t() {
+00080 __TBB_ASSERT( array <= __TBB_BAD_ALLOC, <span class="stringliteral">"should have been freed by clear"</span> );
+00081 }
+00082 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00083 };
+00084
+00085 <span class="comment">// Data fields</span>
+00086
+00088 <span class="keywordtype">void</span>* (*vector_allocator_ptr)(<a class="code" href="a00210.html">concurrent_vector_base_v3</a> &, size_t);
+00089
+<a name="l00091"></a><a class="code" href="a00210.html#p1">00091</a> <a class="code" href="a00191.html">atomic<size_type></a> my_first_block;
+00092
+<a name="l00094"></a><a class="code" href="a00210.html#p2">00094</a> <a class="code" href="a00191.html">atomic<size_type></a> my_early_size;
+00095
+<a name="l00097"></a><a class="code" href="a00210.html#p3">00097</a> <a class="code" href="a00191.html">atomic<segment_t*></a> my_segment;
+00098
+<a name="l00100"></a><a class="code" href="a00210.html#p4">00100</a> segment_t my_storage[pointers_per_short_table];
+00101
+00102 <span class="comment">// Methods</span>
+00103
+00104 concurrent_vector_base_v3() {
+00105 my_early_size = 0;
+00106 my_first_block = 0; <span class="comment">// here is not default_initial_segments</span>
+00107 <span class="keywordflow">for</span>( segment_index_t i = 0; i < pointers_per_short_table; i++)
+00108 my_storage[i].array = NULL;
+00109 my_segment = my_storage;
+00110 }
+00111 __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
+00112
+00113 <span class="keyword">static</span> segment_index_t segment_index_of( size_type index ) {
+00114 <span class="keywordflow">return</span> segment_index_t( __TBB_Log2( index|1 ) );
+00115 }
+00116
+00117 <span class="keyword">static</span> segment_index_t segment_base( segment_index_t k ) {
+00118 <span class="keywordflow">return</span> (segment_index_t(1)<<k & ~segment_index_t(1));
+00119 }
+00120
+00121 <span class="keyword">static</span> <span class="keyword">inline</span> segment_index_t segment_base_index_of( segment_index_t &index ) {
+00122 segment_index_t k = segment_index_of( index );
+00123 index -= segment_base(k);
+00124 <span class="keywordflow">return</span> k;
+00125 }
+00126
+00127 <span class="keyword">static</span> size_type segment_size( segment_index_t k ) {
+00128 <span class="keywordflow">return</span> segment_index_t(1)<<k; <span class="comment">// fake value for k==0</span>
+00129 }
+00130
+<a name="l00132"></a><a class="code" href="a00210.html#x2">00132</a> <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op1)(<span class="keywordtype">void</span>* begin, size_type n );
+00133
+<a name="l00135"></a><a class="code" href="a00210.html#x3">00135</a> <span class="keyword">typedef</span> void (__TBB_EXPORTED_FUNC *internal_array_op2)(<span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+00136
+<a name="l00138"></a><a class="code" href="a00211.html">00138</a> <span class="keyword">struct </span><a class="code" href="a00211.html">internal_segments_table</a> {
+00139 segment_index_t first_block;
+00140 <span class="keywordtype">void</span>* table[pointers_per_long_table];
+00141 };
+00142
+00143 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+00144 size_type __TBB_EXPORTED_METHOD internal_capacity() <span class="keyword">const</span>;
+00145 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+00146 <span class="keywordtype">void</span> internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+00147 size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, <span class="keyword">const</span> <span class="keywordtype">void</span> *src );
+00148 <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+00149 segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+00150 <span class="keywordtype">void</span>* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, <span class="keywordtype">void</span> *table, internal_array_op1 destroy, internal_array_op2 copy );
+00151 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_copy( <span class="keyword">const</span> concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );
+00152 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_assign( <span class="keyword">const</span> concurrent_vector_base_v3& src, size_type element_size,
+00153 internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+00154 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_throw_exception(size_type) <span class="keyword">const</span>;
+00155 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
+00156
+00157 <span class="keyword">private</span>:
+00159 <span class="keyword">class </span>helper;
+00160 <span class="keyword">friend</span> <span class="keyword">class </span>helper;
+00161 };
+00162
+00163 <span class="keyword">typedef</span> concurrent_vector_base_v3 <a class="code" href="a00210.html">concurrent_vector_base</a>;
+00164
+00166
+00168 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Value>
+<a name="l00169"></a><a class="code" href="a00274.html">00169</a> <span class="keyword">class </span><a class="code" href="a00274.html">vector_iterator</a>
+00170 {
+00172 Container* my_vector;
+00173
+00175 size_t my_index;
+00176
+00178
+00179 <span class="keyword">mutable</span> Value* my_item;
+00180
+00181 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T>
+00182 <span class="keyword">friend</span> <a class="code" href="a00274.html">vector_iterator<C,T></a> operator+( ptrdiff_t offset, <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,T></a>& v );
+00183
+00184 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00185 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,U></a>& j );
+00186
+00187 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00188 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( const vector_iterator<C,T>& i, <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,U></a>& j );
+00189
+00190 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00191 <span class="keyword">friend</span> ptrdiff_t operator-( <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,T></a>& i, <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<C,U></a>& j );
+00192
+00193 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+00194 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00274.html">internal::vector_iterator</a>;
+00195
+00196 <span class="preprocessor">#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)</span>
+00197 <span class="preprocessor"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00198 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00209.html">tbb::concurrent_vector</a>;
+00199 <span class="preprocessor">#else</span>
+00200 <span class="preprocessor"></span><span class="keyword">public</span>: <span class="comment">// workaround for MSVC</span>
+00201 <span class="preprocessor">#endif </span>
+00202 <span class="preprocessor"></span>
+00203 <a class="code" href="a00274.html">vector_iterator</a>( <span class="keyword">const</span> Container& vector, size_t index ) :
+00204 my_vector(const_cast<Container*>(&vector)),
+00205 my_index(index),
+00206 my_item(NULL)
+00207 {}
+00208
+00209 <span class="keyword">public</span>:
+<a name="l00211"></a><a class="code" href="a00274.html#a1">00211</a> <a class="code" href="a00274.html">vector_iterator</a>() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+00212
+00213 <a class="code" href="a00274.html">vector_iterator</a>( <span class="keyword">const</span> <a class="code" href="a00274.html">vector_iterator<Container,typename Container::value_type></a>& other ) :
+00214 my_vector(other.my_vector),
+00215 my_index(other.my_index),
+00216 my_item(other.my_item)
+00217 {}
+00218
+00219 vector_iterator operator+( ptrdiff_t offset )<span class="keyword"> const </span>{
+00220 <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index+offset );
+00221 }
+00222 vector_iterator &operator+=( ptrdiff_t offset ) {
+00223 my_index+=offset;
+00224 my_item = NULL;
+00225 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00226 }
+00227 vector_iterator operator-( ptrdiff_t offset )<span class="keyword"> const </span>{
+00228 <span class="keywordflow">return</span> vector_iterator( *my_vector, my_index-offset );
+00229 }
+00230 vector_iterator &operator-=( ptrdiff_t offset ) {
+00231 my_index-=offset;
+00232 my_item = NULL;
+00233 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00234 }
+00235 Value& operator*()<span class="keyword"> const </span>{
+00236 Value* item = my_item;
+00237 <span class="keywordflow">if</span>( !item ) {
+00238 item = my_item = &my_vector->internal_subscript(my_index);
+00239 }
+00240 __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), <span class="stringliteral">"corrupt cache"</span> );
+00241 <span class="keywordflow">return</span> *item;
+00242 }
+00243 Value& <a class="code" href="a00209.html#a12">operator[]</a>( ptrdiff_t k )<span class="keyword"> const </span>{
+00244 <span class="keywordflow">return</span> my_vector->internal_subscript(my_index+k);
+00245 }
+00246 Value* operator->()<span class="keyword"> const </span>{<span class="keywordflow">return</span> &operator*();}
+00247
+<a name="l00249"></a><a class="code" href="a00274.html#a10">00249</a> <a class="code" href="a00274.html">vector_iterator</a>& operator++() {
+00250 size_t k = ++my_index;
+00251 <span class="keywordflow">if</span>( my_item ) {
+00252 <span class="comment">// Following test uses 2's-complement wizardry</span>
+00253 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+00254 <span class="comment">// k is a power of two that is at least k-2</span>
+00255 my_item= NULL;
+00256 } <span class="keywordflow">else</span> {
+00257 ++my_item;
+00258 }
+00259 }
+00260 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00261 }
+00262
+<a name="l00264"></a><a class="code" href="a00274.html#a11">00264</a> <a class="code" href="a00274.html">vector_iterator</a>& operator--() {
+00265 __TBB_ASSERT( my_index>0, <span class="stringliteral">"operator--() applied to iterator already at beginning of concurrent_vector"</span> );
+00266 size_t k = my_index--;
+00267 <span class="keywordflow">if</span>( my_item ) {
+00268 <span class="comment">// Following test uses 2's-complement wizardry</span>
+00269 <span class="keywordflow">if</span>( (k& (k-2))==0 ) {
+00270 <span class="comment">// k is a power of two that is at least k-2 </span>
+00271 my_item= NULL;
+00272 } <span class="keywordflow">else</span> {
+00273 --my_item;
+00274 }
+00275 }
+00276 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00277 }
+00278
+<a name="l00280"></a><a class="code" href="a00274.html#a12">00280</a> <a class="code" href="a00274.html">vector_iterator</a> operator++(<span class="keywordtype">int</span>) {
+00281 <a class="code" href="a00274.html">vector_iterator</a> result = *<span class="keyword">this</span>;
+00282 operator++();
+00283 <span class="keywordflow">return</span> result;
+00284 }
+00285
+<a name="l00287"></a><a class="code" href="a00274.html#a13">00287</a> <a class="code" href="a00274.html">vector_iterator</a> operator--(<span class="keywordtype">int</span>) {
+00288 <a class="code" href="a00274.html">vector_iterator</a> result = *<span class="keyword">this</span>;
+00289 operator--();
+00290 <span class="keywordflow">return</span> result;
+00291 }
+00292
+00293 <span class="comment">// STL support</span>
+00294
+00295 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00296 <span class="keyword">typedef</span> Value value_type;
+00297 <span class="keyword">typedef</span> Value* pointer;
+00298 <span class="keyword">typedef</span> Value& reference;
+00299 <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;
+00300 };
+00301
+00302 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T>
+00303 vector_iterator<Container,T> operator+( ptrdiff_t offset, <span class="keyword">const</span> vector_iterator<Container,T>& v ) {
+00304 <span class="keywordflow">return</span> vector_iterator<Container,T>( *v.my_vector, v.my_index+offset );
+00305 }
+00306
+00307 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00308 <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00309 <span class="keywordflow">return</span> i.<a class="code" href="a00274.html#r1">my_index</a>==j.<a class="code" href="a00274.html#r1">my_index</a> && i.<a class="code" href="a00274.html#r0">my_vector</a> == j.<a class="code" href="a00274.html#r0">my_vector</a>;
+00310 }
+00311
+00312 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00313 <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00314 <span class="keywordflow">return</span> !(i==j);
+00315 }
+00316
+00317 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00318 <span class="keywordtype">bool</span> operator<( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00319 <span class="keywordflow">return</span> i.<a class="code" href="a00274.html#r1">my_index</a><j.<a class="code" href="a00274.html#r1">my_index</a>;
+00320 }
+00321
+00322 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00323 <span class="keywordtype">bool</span> operator>( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00324 <span class="keywordflow">return</span> j<i;
+00325 }
+00326
+00327 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00328 <span class="keywordtype">bool</span> operator>=( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00329 <span class="keywordflow">return</span> !(i<j);
+00330 }
+00331
+00332 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00333 <span class="keywordtype">bool</span> operator<=( const vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00334 <span class="keywordflow">return</span> !(j<i);
+00335 }
+00336
+00337 <span class="keyword">template</span><<span class="keyword">typename</span> Container, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00338 ptrdiff_t operator-( <span class="keyword">const</span> vector_iterator<Container,T>& i, <span class="keyword">const</span> vector_iterator<Container,U>& j ) {
+00339 <span class="keywordflow">return</span> ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+00340 }
+00341
+00342 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00343 <span class="keyword">class </span>allocator_base {
+00344 <span class="keyword">public</span>:
+00345 <span class="keyword">typedef</span> <span class="keyword">typename</span> A::template
+00346 rebind<T>::other allocator_type;
+00347 allocator_type my_allocator;
+00348
+00349 allocator_base(<span class="keyword">const</span> allocator_type &a = allocator_type() ) : my_allocator(a) {}
+00350 };
+00351
+00352 } <span class="comment">// namespace internal</span>
+00354 <span class="comment"></span>
+00356
+00410 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00411"></a><a class="code" href="a00209.html">00411</a> <span class="keyword">class </span><a class="code" href="a00209.html">concurrent_vector</a>: <span class="keyword">protected</span> internal::allocator_base<T, A>,
+00412 <span class="keyword">private</span> internal::concurrent_vector_base_v3 {
+00413 <span class="keyword">private</span>:
+00414 <span class="keyword">template</span><<span class="keyword">typename</span> I>
+00415 <span class="keyword">class </span>generic_range_type: <span class="keyword">public</span> <a class="code" href="a00195.html">blocked_range</a><I> {
+00416 <span class="keyword">public</span>:
+00417 <span class="keyword">typedef</span> T value_type;
+00418 <span class="keyword">typedef</span> T& reference;
+00419 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00420 <span class="keyword">typedef</span> I <a class="code" href="a00274.html">iterator</a>;
+00421 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00422 generic_range_type( I begin_, I end_, size_t grainsize = 1) : <a class="code" href="a00195.html">blocked_range<I></a>(begin_,end_,grainsize) {}
+00423 <span class="keyword">template</span><<span class="keyword">typename</span> U>
+00424 generic_range_type( <span class="keyword">const</span> generic_range_type<U>& r) : <a class="code" href="a00195.html">blocked_range<I></a>(r.begin(),r.end(),r.grainsize()) {}
+00425 generic_range_type( generic_range_type& r, <a class="code" href="a00254.html">split</a> ) : <a class="code" href="a00195.html">blocked_range<I></a>(r,<a class="code" href="a00254.html">split</a>()) {}
+00426 };
+00427
+00428 <span class="keyword">template</span><<span class="keyword">typename</span> C, <span class="keyword">typename</span> U>
+00429 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00274.html">internal::vector_iterator</a>;
+00430 <span class="keyword">public</span>:
+00431 <span class="comment">//------------------------------------------------------------------------</span>
+00432 <span class="comment">// STL compatible types</span>
+00433 <span class="comment">//------------------------------------------------------------------------</span>
+00434 <span class="keyword">typedef</span> internal::concurrent_vector_base_v3::size_type size_type;
+00435 <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::allocator_base<T, A>::allocator_type allocator_type;
+00436
+00437 <span class="keyword">typedef</span> T value_type;
+00438 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00439 <span class="keyword">typedef</span> T& reference;
+00440 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00441 <span class="keyword">typedef</span> T *pointer;
+00442 <span class="keyword">typedef</span> <span class="keyword">const</span> T *const_pointer;
+00443
+00444 <span class="keyword">typedef</span> <a class="code" href="a00274.html">internal::vector_iterator<concurrent_vector,T></a> <a class="code" href="a00274.html">iterator</a>;
+00445 <span class="keyword">typedef</span> <a class="code" href="a00274.html">internal::vector_iterator<concurrent_vector,const T></a> <a class="code" href="a00274.html">const_iterator</a>;
+00446
+00447 <span class="preprocessor">#if !defined(_MSC_VER) || _CPPLIB_VER>=300 </span>
+00448 <span class="preprocessor"></span> <span class="comment">// Assume ISO standard definition of std::reverse_iterator</span>
+00449 <span class="keyword">typedef</span> std::reverse_iterator<iterator> reverse_iterator;
+00450 <span class="keyword">typedef</span> std::reverse_iterator<const_iterator> const_reverse_iterator;
+00451 <span class="preprocessor">#else</span>
+00452 <span class="preprocessor"></span> <span class="comment">// Use non-standard std::reverse_iterator</span>
+00453 <span class="keyword">typedef</span> std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+00454 <span class="keyword">typedef</span> std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+00455 <span class="preprocessor">#endif </span><span class="comment">/* defined(_MSC_VER) && (_MSC_VER<1300) */</span>
+00456
+00457 <span class="comment">//------------------------------------------------------------------------</span>
+00458 <span class="comment">// Parallel algorithm support</span>
+00459 <span class="comment">//------------------------------------------------------------------------</span>
+00460 <span class="keyword">typedef</span> generic_range_type<iterator> range_type;
+00461 <span class="keyword">typedef</span> generic_range_type<const_iterator> const_range_type;
+00462
+00463 <span class="comment">//------------------------------------------------------------------------</span>
+00464 <span class="comment">// STL compatible constructors & destructors</span>
+00465 <span class="comment">//------------------------------------------------------------------------</span>
+00466
+<a name="l00468"></a><a class="code" href="a00209.html#a0">00468</a> <span class="keyword">explicit</span> <a class="code" href="a00209.html">concurrent_vector</a>(<span class="keyword">const</span> allocator_type &a = allocator_type())
+00469 : internal::allocator_base<T, A>(a)
+00470 {
+00471 vector_allocator_ptr = &internal_allocator;
+00472 }
+00473
+<a name="l00475"></a><a class="code" href="a00209.html#a1">00475</a> <a class="code" href="a00209.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00209.html">concurrent_vector</a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+00476 : internal::allocator_base<T, A>(a)
+00477 {
+00478 vector_allocator_ptr = &internal_allocator;
+00479 internal_copy(vector, <span class="keyword">sizeof</span>(T), ©_array);
+00480 }
+00481
+00483 <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00484"></a><a class="code" href="a00209.html#a2">00484</a> <a class="code" href="a00209.html">concurrent_vector</a>( <span class="keyword">const</span> <a class="code" href="a00209.html">concurrent_vector<T, M></a>& vector, <span class="keyword">const</span> allocator_type& a = allocator_type() )
+00485 : internal::allocator_base<T, A>(a)
+00486 {
+00487 vector_allocator_ptr = &internal_allocator;
+00488 internal_copy(vector.<a class="code" href="a00209.html#a42">internal_vector_base</a>(), <span class="keyword">sizeof</span>(T), ©_array);
+00489 }
+00490
+<a name="l00492"></a><a class="code" href="a00209.html#a3">00492</a> <span class="keyword">explicit</span> <a class="code" href="a00209.html">concurrent_vector</a>(size_type n)
+00493 {
+00494 vector_allocator_ptr = &internal_allocator;
+00495 <span class="keywordflow">if</span> ( !n ) <span class="keywordflow">return</span>;
+00496 internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size()); my_early_size = n;
+00497 __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
+00498 initialize_array(static_cast<T*>(my_segment[0].array), NULL, n);
+00499 }
+00500
+<a name="l00502"></a><a class="code" href="a00209.html#a4">00502</a> <a class="code" href="a00209.html">concurrent_vector</a>(size_type n, const_reference t, <span class="keyword">const</span> allocator_type& a = allocator_type())
+00503 : internal::allocator_base<T, A>(a)
+00504 {
+00505 vector_allocator_ptr = &internal_allocator;
+00506 internal_assign( n, t );
+00507 }
+00508
+00510 <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00511"></a><a class="code" href="a00209.html#a5">00511</a> <a class="code" href="a00209.html">concurrent_vector</a>(I first, I last, <span class="keyword">const</span> allocator_type &a = allocator_type())
+00512 : internal::allocator_base<T, A>(a)
+00513 {
+00514 vector_allocator_ptr = &internal_allocator;
+00515 internal_assign(first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+00516 }
+00517
+<a name="l00519"></a><a class="code" href="a00209.html#a6">00519</a> <a class="code" href="a00209.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00209.html">concurrent_vector</a>& vector ) {
+00520 <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector )
+00521 concurrent_vector_base_v3::internal_assign(vector, <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, ©_array);
+00522 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00523 }
+00524
+00526 <span class="keyword">template</span><<span class="keyword">class</span> M>
+<a name="l00527"></a><a class="code" href="a00209.html#a7">00527</a> <a class="code" href="a00209.html">concurrent_vector</a>& operator=( <span class="keyword">const</span> <a class="code" href="a00209.html">concurrent_vector<T, M></a>& vector ) {
+00528 <span class="keywordflow">if</span>( static_cast<void*>( this ) != static_cast<const void*>( &vector ) )
+00529 concurrent_vector_base_v3::internal_assign(vector.<a class="code" href="a00209.html#a42">internal_vector_base</a>(),
+00530 <span class="keyword">sizeof</span>(T), &destroy_array, &assign_array, ©_array);
+00531 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00532 }
+00533
+00534 <span class="comment">//------------------------------------------------------------------------</span>
+00535 <span class="comment">// Concurrent operations</span>
+00536 <span class="comment">//------------------------------------------------------------------------</span>
+00538 <span class="comment"></span>
+<a name="l00539"></a><a class="code" href="a00209.html#a8">00539</a> size_type grow_by( size_type delta ) {
+00540 <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array, NULL ) : my_early_size;
+00541 }
+00542
+00544
+<a name="l00545"></a><a class="code" href="a00209.html#a9">00545</a> size_type grow_by( size_type delta, const_reference t ) {
+00546 <span class="keywordflow">return</span> delta ? internal_grow_by( delta, <span class="keyword">sizeof</span>(T), &initialize_array_by, static_cast<const void*>(&t) ) : my_early_size;
+00547 }
+00548
+<a name="l00550"></a><a class="code" href="a00209.html#a10">00550</a> <span class="keywordtype">void</span> grow_to_at_least( size_type n ) {
+00551 <span class="keywordflow">if</span>( my_early_size<n )
+00552 internal_grow_to_at_least( n, <span class="keyword">sizeof</span>(T), &initialize_array, NULL );
+00553 };
+00554
+<a name="l00556"></a><a class="code" href="a00209.html#a11">00556</a> size_type push_back( const_reference item ) {
+00557 size_type k;
+00558 internal_loop_guide loop(1, internal_push_back(<span class="keyword">sizeof</span>(T),k));
+00559 loop.init(&item);
+00560 <span class="keywordflow">return</span> k;
+00561 }
+00562
+00564
+<a name="l00566"></a><a class="code" href="a00209.html#a12">00566</a> reference operator[]( size_type index ) {
+00567 <span class="keywordflow">return</span> internal_subscript(index);
+00568 }
+00569
+<a name="l00571"></a><a class="code" href="a00209.html#a13">00571</a> const_reference operator[]( size_type index )<span class="keyword"> const </span>{
+00572 <span class="keywordflow">return</span> internal_subscript(index);
+00573 }
+00574
+<a name="l00576"></a><a class="code" href="a00209.html#a14">00576</a> reference at( size_type index ) {
+00577 <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+00578 }
+00579
+<a name="l00581"></a><a class="code" href="a00209.html#a15">00581</a> const_reference at( size_type index )<span class="keyword"> const </span>{
+00582 <span class="keywordflow">return</span> internal_subscript_with_exceptions(index);
+00583 }
+00584
+<a name="l00586"></a><a class="code" href="a00209.html#a16">00586</a> range_type range( size_t grainsize = 1) {
+00587 <span class="keywordflow">return</span> range_type( begin(), end(), grainsize );
+00588 }
+00589
+<a name="l00591"></a><a class="code" href="a00209.html#a17">00591</a> const_range_type range( size_t grainsize = 1 )<span class="keyword"> const </span>{
+00592 <span class="keywordflow">return</span> const_range_type( begin(), end(), grainsize );
+00593 }
+00594 <span class="comment">//------------------------------------------------------------------------</span>
+00595 <span class="comment">// Capacity</span>
+00596 <span class="comment">//------------------------------------------------------------------------</span>
+<a name="l00598"></a><a class="code" href="a00209.html#a18">00598</a> <span class="comment"></span> size_type size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_early_size;}
+00599
+<a name="l00601"></a><a class="code" href="a00209.html#a19">00601</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !my_early_size;}
+00602
+<a name="l00604"></a><a class="code" href="a00209.html#a20">00604</a> size_type capacity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> internal_capacity();}
+00605
+00607
+<a name="l00609"></a><a class="code" href="a00209.html#a21">00609</a> <span class="keywordtype">void</span> reserve( size_type n ) {
+00610 <span class="keywordflow">if</span>( n )
+00611 internal_reserve(n, <span class="keyword">sizeof</span>(T), max_size());
+00612 }
+00613
+00615 <span class="keywordtype">void</span> compact();
+00616
+<a name="l00618"></a><a class="code" href="a00209.html#a23">00618</a> size_type max_size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (~size_type(0))/<span class="keyword">sizeof</span>(T);}
+00619
+00620 <span class="comment">//------------------------------------------------------------------------</span>
+00621 <span class="comment">// STL support</span>
+00622 <span class="comment">//------------------------------------------------------------------------</span>
+00623
+<a name="l00625"></a><a class="code" href="a00209.html#a24">00625</a> <a class="code" href="a00274.html">iterator</a> begin() {<span class="keywordflow">return</span> <a class="code" href="a00274.html">iterator</a>(*<span class="keyword">this</span>,0);}
+<a name="l00627"></a><a class="code" href="a00209.html#a25">00627</a> <a class="code" href="a00274.html">iterator</a> end() {<span class="keywordflow">return</span> <a class="code" href="a00274.html">iterator</a>(*<span class="keyword">this</span>,size());}
+<a name="l00629"></a><a class="code" href="a00209.html#a26">00629</a> <a class="code" href="a00274.html">const_iterator</a> begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00274.html">const_iterator</a>(*<span class="keyword">this</span>,0);}
+<a name="l00631"></a><a class="code" href="a00209.html#a27">00631</a> <a class="code" href="a00274.html">const_iterator</a> end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00274.html">const_iterator</a>(*<span class="keyword">this</span>,size());}
+<a name="l00633"></a><a class="code" href="a00209.html#a28">00633</a> reverse_iterator rbegin() {<span class="keywordflow">return</span> reverse_iterator(end());}
+<a name="l00635"></a><a class="code" href="a00209.html#a29">00635</a> reverse_iterator rend() {<span class="keywordflow">return</span> reverse_iterator(begin());}
+<a name="l00637"></a><a class="code" href="a00209.html#a30">00637</a> const_reverse_iterator rbegin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(end());}
+<a name="l00639"></a><a class="code" href="a00209.html#a31">00639</a> const_reverse_iterator rend()<span class="keyword"> const </span>{<span class="keywordflow">return</span> const_reverse_iterator(begin());}
+<a name="l00641"></a><a class="code" href="a00209.html#a32">00641</a> reference front() {
+00642 __TBB_ASSERT( size()>0, NULL);
+00643 <span class="keywordflow">return</span> static_cast<T*>(my_segment[0].array)[0];
+00644 }
+<a name="l00646"></a><a class="code" href="a00209.html#a33">00646</a> const_reference front()<span class="keyword"> const </span>{
+00647 __TBB_ASSERT( size()>0, NULL);
+00648 <span class="keywordflow">return</span> static_cast<const T*>(my_segment[0].array)[0];
+00649 }
+<a name="l00651"></a><a class="code" href="a00209.html#a34">00651</a> reference back() {
+00652 __TBB_ASSERT( size()>0, NULL);
+00653 <span class="keywordflow">return</span> internal_subscript( my_early_size-1 );
+00654 }
+<a name="l00656"></a><a class="code" href="a00209.html#a35">00656</a> const_reference back()<span class="keyword"> const </span>{
+00657 __TBB_ASSERT( size()>0, NULL);
+00658 <span class="keywordflow">return</span> internal_subscript( my_early_size-1 );
+00659 }
+<a name="l00661"></a><a class="code" href="a00209.html#a36">00661</a> allocator_type get_allocator()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this->my_allocator; }
+00662
+<a name="l00664"></a><a class="code" href="a00209.html#a37">00664</a> <span class="keywordtype">void</span> assign(size_type n, const_reference t) { clear(); internal_assign( n, t ); }
+00665
+00667 <span class="keyword">template</span><<span class="keyword">class</span> I>
+<a name="l00668"></a><a class="code" href="a00209.html#a38">00668</a> <span class="keywordtype">void</span> assign(I first, I last) {
+00669 clear(); internal_assign( first, last, <span class="keyword">static_cast</span><is_integer_tag<std::numeric_limits<I>::is_integer> *>(0) );
+00670 }
+00671
+<a name="l00673"></a><a class="code" href="a00209.html#a39">00673</a> <span class="keywordtype">void</span> swap(<a class="code" href="a00209.html">concurrent_vector</a> &vector) {
+00674 <span class="keywordflow">if</span>( <span class="keyword">this</span> != &vector ) {
+00675 concurrent_vector_base_v3::internal_swap(static_cast<concurrent_vector_base_v3&>(vector));
+00676 std::swap(this->my_allocator, vector.my_allocator);
+00677 }
+00678 }
+00679
+00681
+<a name="l00682"></a><a class="code" href="a00209.html#a40">00682</a> <span class="keywordtype">void</span> clear() {
+00683 internal_clear(&destroy_array);
+00684 }
+00685
+<a name="l00687"></a><a class="code" href="a00209.html#a41">00687</a> ~<a class="code" href="a00209.html">concurrent_vector</a>() {
+00688 segment_t *table = my_segment;
+00689 internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
+00690 <span class="comment">// base class destructor call should be then</span>
+00691 }
+00692
+00693 <span class="keyword">const</span> <a class="code" href="a00210.html">internal::concurrent_vector_base_v3</a> &internal_vector_base()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
+00694 <span class="keyword">private</span>:
+00696 <span class="keyword">static</span> <span class="keywordtype">void</span> *internal_allocator(internal::concurrent_vector_base_v3 &vb, size_t k) {
+00697 <span class="keywordflow">return</span> static_cast<concurrent_vector<T, A>&>(vb).my_allocator.allocate(k);
+00698 }
+00700 <span class="keywordtype">void</span> internal_free_segments(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block);
+00701
+00703 T& internal_subscript( size_type index ) <span class="keyword">const</span>;
+00704
+00706 T& internal_subscript_with_exceptions( size_type index ) <span class="keyword">const</span>;
+00707
+00709 <span class="keywordtype">void</span> internal_assign(size_type n, const_reference t);
+00710
+00712 <span class="keyword">template</span><<span class="keywordtype">bool</span> B> <span class="keyword">class </span>is_integer_tag;
+00713
+00715 <span class="keyword">template</span><<span class="keyword">class</span> I>
+00716 <span class="keywordtype">void</span> internal_assign(I first, I last, is_integer_tag<true> *) {
+00717 internal_assign(static_cast<size_type>(first), static_cast<T>(last));
+00718 }
+00720 <span class="keyword">template</span><<span class="keyword">class</span> I>
+00721 <span class="keywordtype">void</span> internal_assign(I first, I last, is_integer_tag<false> *) {
+00722 internal_assign_iterators(first, last);
+00723 }
+00725 <span class="keyword">template</span><<span class="keyword">class</span> I>
+00726 <span class="keywordtype">void</span> internal_assign_iterators(I first, I last);
+00727
+00729 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>*, size_type n );
+00730
+00732 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+00733
+00735 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+00736
+00738 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n );
+00739
+00741 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC destroy_array( <span class="keywordtype">void</span>* begin, size_type n );
+00742
+00744 <span class="keyword">class </span>internal_loop_guide : internal::no_copy {
+00745 <span class="keyword">public</span>:
+00746 <span class="keyword">const</span> pointer array;
+00747 <span class="keyword">const</span> size_type n;
+00748 size_type i;
+00749 internal_loop_guide(size_type ntrials, <span class="keywordtype">void</span> *ptr)
+00750 : array(static_cast<pointer>(ptr)), n(ntrials), i(0) {}
+00751 <span class="keywordtype">void</span> init() { <span class="keywordflow">for</span>(; i < n; ++i) <span class="keyword">new</span>( &array[i] ) T(); }
+00752 <span class="keywordtype">void</span> init(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) new( &array[i] ) T(*static_cast<const T*>(src)); }
+00753 <span class="keywordtype">void</span> copy(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) new( &array[i] ) T(static_cast<const T*>(src)[i]); }
+00754 <span class="keywordtype">void</span> assign(<span class="keyword">const</span> <span class="keywordtype">void</span> *src) { <span class="keywordflow">for</span>(; i < n; ++i) array[i] = static_cast<const T*>(src)[i]; }
+00755 <span class="keyword">template</span><<span class="keyword">class</span> I> <span class="keywordtype">void</span> iterate(I &src) { <span class="keywordflow">for</span>(; i < n; ++i, ++src) <span class="keyword">new</span>( &array[i] ) T( *src ); }
+00756 ~internal_loop_guide() {
+00757 <span class="keywordflow">if</span>(i < n) <span class="comment">// if exception raised, do zerroing on the rest of items</span>
+00758 std::memset(array+i, 0, (n-i)*<span class="keyword">sizeof</span>(value_type));
+00759 }
+00760 };
+00761 };
+00762
+00763 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+<a name="l00764"></a><a class="code" href="a00209.html#a22">00764</a> <span class="keywordtype">void</span> <a class="code" href="a00209.html">concurrent_vector<T, A>::compact</a>() {
+00765 internal_segments_table old;
+00766 <span class="keywordflow">try</span> {
+00767 <span class="keywordflow">if</span>( internal_compact( <span class="keyword">sizeof</span>(T), &old, &destroy_array, ©_array ) )
+00768 internal_free_segments( old.table, pointers_per_long_table, old.first_block ); <span class="comment">// free joined and unnecessary segments</span>
+00769 } <span class="keywordflow">catch</span>(...) {
+00770 <span class="keywordflow">if</span>( old.first_block ) <span class="comment">// free segment allocated for compacting. Only for support of exceptions in ctor of user T[ype]</span>
+00771 internal_free_segments( old.table, 1, old.first_block );
+00772 <span class="keywordflow">throw</span>;
+00773 }
+00774 }
+00775
+00776 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00777 <span class="keywordtype">void</span> <a class="code" href="a00209.html">concurrent_vector<T, A>::internal_free_segments</a>(<span class="keywordtype">void</span> *table[], segment_index_t k, segment_index_t first_block) {
+00778 <span class="comment">// Free the arrays</span>
+00779 <span class="keywordflow">while</span>( k > first_block ) {
+00780 --k;
+00781 T* array = static_cast<T*>(table[k]);
+00782 table[k] = NULL;
+00783 <span class="keywordflow">if</span>( array > __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
+00784 this->my_allocator.deallocate( array, segment_size(k) );
+00785 }
+00786 T* array = static_cast<T*>(table[0]);
+00787 <span class="keywordflow">if</span>( array > __TBB_BAD_ALLOC ) {
+00788 __TBB_ASSERT( first_block > 0, NULL );
+00789 <span class="keywordflow">while</span>(k > 0) table[--k] = NULL;
+00790 this->my_allocator.deallocate( array, segment_size(first_block) );
+00791 }
+00792 }
+00793
+00794 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00795 T& concurrent_vector<T, A>::internal_subscript( size_type index )<span class="keyword"> const </span>{
+00796 __TBB_ASSERT( index<<a class="code" href="a00209.html#a18">size</a>(), <span class="stringliteral">"index out of bounds"</span> );
+00797 size_type j = index;
+00798 segment_index_t k = segment_base_index_of( j );
+00799 <span class="comment">// no need in __TBB_load_with_acquire since thread works in own space or gets </span>
+00800 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00801 <span class="preprocessor"></span> <span class="keywordflow">return</span> static_cast<T*>( <a class="code" href="a00319.html#a42">tbb::internal::itt_load_pointer_v3</a>(&my_segment[k].array))[j];
+00802 <span class="preprocessor">#else</span>
+00803 <span class="preprocessor"></span> <span class="keywordflow">return</span> static_cast<T*>(my_segment[k].array)[j];
+00804 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+00805 }
+00806
+00807 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00808 T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index )<span class="keyword"> const </span>{
+00809 <span class="keywordflow">if</span>( index >= <a class="code" href="a00209.html#a18">size</a>() )
+00810 internal_throw_exception(0); <span class="comment">// throw std::out_of_range</span>
+00811 size_type j = index;
+00812 segment_index_t k = segment_base_index_of( j );
+00813 <span class="keywordflow">if</span>( my_segment == (segment_t*)my_storage && k >= pointers_per_short_table )
+00814 internal_throw_exception(1); <span class="comment">// throw std::out_of_range</span>
+00815 <span class="keywordtype">void</span> *array = my_segment[k].array; <span class="comment">// no need in __TBB_load_with_acquire</span>
+00816 <span class="keywordflow">if</span>( array <= __TBB_BAD_ALLOC ) <span class="comment">// check for correct segment pointer</span>
+00817 internal_throw_exception(2); <span class="comment">// throw std::range_error</span>
+00818 <span class="keywordflow">return</span> static_cast<T*>(array)[j];
+00819 }
+00820
+00821 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00822 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign(size_type n, const_reference t)
+00823 {
+00824 __TBB_ASSERT(my_early_size == 0, NULL);
+00825 <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+00826 internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00209.html#a23">max_size</a>());
+00827 my_early_size = n;
+00828 segment_index_t k = 0;
+00829 size_type sz = segment_size( my_first_block );
+00830 <span class="keywordflow">while</span>( sz < n ) {
+00831 initialize_array_by(static_cast<T*>(my_segment[k].array), static_cast<const void*>(&t), sz);
+00832 n -= sz;
+00833 <span class="keywordflow">if</span>( !k ) k = my_first_block;
+00834 <span class="keywordflow">else</span> { ++k; sz <<= 1; }
+00835 }
+00836 initialize_array_by(static_cast<T*>(my_segment[k].array), static_cast<const void*>(&t), n);
+00837 }
+00838
+00839 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A> <span class="keyword">template</span><<span class="keyword">class</span> I>
+00840 <span class="keywordtype">void</span> concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+00841 __TBB_ASSERT(my_early_size == 0, NULL);
+00842 size_type n = std::distance(first, last);
+00843 <span class="keywordflow">if</span>( !n ) <span class="keywordflow">return</span>;
+00844 internal_reserve(n, <span class="keyword">sizeof</span>(T), <a class="code" href="a00209.html#a23">max_size</a>());
+00845 my_early_size = n;
+00846 segment_index_t k = 0;
+00847 size_type sz = segment_size( my_first_block );
+00848 <span class="keywordflow">while</span>( sz < n ) {
+00849 internal_loop_guide loop(sz, my_segment[k].array);
+00850 loop.iterate(first);
+00851 n -= sz;
+00852 <span class="keywordflow">if</span>( !k ) k = my_first_block;
+00853 <span class="keywordflow">else</span> { ++k; sz <<= 1; }
+00854 }
+00855 internal_loop_guide loop(n, my_segment[k].array);
+00856 loop.iterate(first);
+00857 }
+00858
+00859 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00860 <span class="keywordtype">void</span> concurrent_vector<T, A>::initialize_array( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *, size_type n ) {
+00861 internal_loop_guide loop(n, begin); loop.init();
+00862 }
+00863
+00864 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00865 <span class="keywordtype">void</span> concurrent_vector<T, A>::initialize_array_by( <span class="keywordtype">void</span>* begin, <span class="keyword">const</span> <span class="keywordtype">void</span> *src, size_type n ) {
+00866 internal_loop_guide loop(n, begin); loop.init(src);
+00867 }
+00868
+00869 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00870 <span class="keywordtype">void</span> concurrent_vector<T, A>::copy_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
+00871 internal_loop_guide loop(n, dst); loop.copy(src);
+00872 }
+00873
+00874 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00875 <span class="keywordtype">void</span> concurrent_vector<T, A>::assign_array( <span class="keywordtype">void</span>* dst, <span class="keyword">const</span> <span class="keywordtype">void</span>* src, size_type n ) {
+00876 internal_loop_guide loop(n, dst); loop.assign(src);
+00877 }
+00878
+00879 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+00880 <span class="preprocessor"></span> <span class="comment">// Workaround for overzealous compiler warning</span>
+00881 <span class="preprocessor"> #pragma warning (push)</span>
+00882 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4189)</span>
+00883 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00884 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00885 <span class="keywordtype">void</span> concurrent_vector<T, A>::destroy_array( <span class="keywordtype">void</span>* begin, size_type n ) {
+00886 T* array = static_cast<T*>(begin);
+00887 <span class="keywordflow">for</span>( size_type j=n; j>0; --j )
+00888 array[j-1].~T(); <span class="comment">// destructors are supposed to not throw any exceptions</span>
+00889 }
+00890 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) </span>
+00891 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00892 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4189 is back </span>
+00893 <span class="preprocessor"></span>
+00894 <span class="comment">// concurrent_vector's template functions</span>
+00895 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00896 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b) {
+00897 <span class="comment">//TODO[?]: deal with _Range_checked_iterator_tag of MSVC.</span>
+00898 <span class="comment">// Simply: return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());</span>
+00899 <span class="keywordflow">if</span>(a.size() != b.size()) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00900 <span class="keyword">typename</span> concurrent_vector<T, A1>::const_iterator i(a.begin());
+00901 <span class="keyword">typename</span> concurrent_vector<T, A2>::const_iterator j(b.begin());
+00902 <span class="keywordflow">for</span>(; i != a.end(); ++i, ++j)
+00903 <span class="keywordflow">if</span>( !(*i == *j) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00904 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00905 }
+00906
+00907 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00908 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+00909 { <span class="keywordflow">return</span> !(a == b); }
+00910
+00911 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00912 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(const concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+00913 { <span class="keywordflow">return</span> (std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end())); }
+00914
+00915 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00916 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+00917 { <span class="keywordflow">return</span> b < a; }
+00918
+00919 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00920 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(const concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+00921 { <span class="keywordflow">return</span> !(b < a); }
+00922
+00923 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A1, <span class="keyword">class</span> A2>
+00924 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(<span class="keyword">const</span> concurrent_vector<T, A1> &a, <span class="keyword">const</span> concurrent_vector<T, A2> &b)
+00925 { <span class="keywordflow">return</span> !(a < b); }
+00926
+00927 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">class</span> A>
+00928 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
+00929 { a.swap( b ); }
+00930
+00931 } <span class="comment">// namespace tbb</span>
+00932
+00933 <span class="preprocessor">#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)</span>
+00934 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00935 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4267 is back</span>
+00936 <span class="preprocessor"></span>
+00937 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_concurrent_vector_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00292.html b/doc/html/a00332.html
similarity index 74%
rename from doc/html/a00292.html
rename to doc/html/a00332.html
index ca79cb3..c132539 100644
--- a/doc/html/a00292.html
+++ b/doc/html/a00332.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -44,16 +44,16 @@
00037 } } <span class="comment">//namespaces</span>
00038 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00039
-00040 <span class="preprocessor">#include <stdio.h></span>
-00041 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00040 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00041 <span class="preprocessor">#include "tbb_profiling.h"</span>
00042
00043 <span class="keyword">namespace </span>tbb {
00044
00046
-<a name="l00048"></a><a class="code" href="a00198.html">00048</a> <span class="keyword">class </span><a class="code" href="a00198.html">mutex</a> {
+<a name="l00048"></a><a class="code" href="a00227.html">00048</a> <span class="keyword">class </span><a class="code" href="a00227.html">mutex</a> {
00049 <span class="keyword">public</span>:
-<a name="l00051"></a><a class="code" href="a00198.html#a0">00051</a> <a class="code" href="a00198.html">mutex</a>() {
-00052 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00051"></a><a class="code" href="a00227.html#a0">00051</a> <a class="code" href="a00227.html">mutex</a>() {
+00052 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
00053 <span class="preprocessor"></span> internal_construct();
00054 <span class="preprocessor">#else</span>
00055 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -63,11 +63,11 @@
00059 <span class="keywordflow">if</span>( error_code )
00060 tbb::internal::handle_perror(error_code,<span class="stringliteral">"mutex: pthread_mutex_init failed"</span>);
00061 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-00062 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00062 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00063 };
00064
-00065 ~<a class="code" href="a00198.html">mutex</a>() {
-00066 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+00065 ~<a class="code" href="a00227.html">mutex</a>() {
+00066 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00067 <span class="preprocessor"></span> internal_destroy();
00068 <span class="preprocessor">#else</span>
00069 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -76,58 +76,58 @@
00072 <span class="preprocessor"></span> pthread_mutex_destroy(&impl);
00073
00074 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00075 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00075 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00076 };
00077
00078 <span class="keyword">class </span>scoped_lock;
00079 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
00080
00082
-<a name="l00084"></a><a class="code" href="a00199.html">00084</a> <span class="keyword">class </span><a class="code" href="a00199.html">scoped_lock</a> : <span class="keyword">private</span> internal::no_copy {
+<a name="l00084"></a><a class="code" href="a00228.html">00084</a> <span class="keyword">class </span><a class="code" href="a00228.html">scoped_lock</a> : internal::no_copy {
00085 <span class="keyword">public</span>:
-<a name="l00087"></a><a class="code" href="a00199.html#a0">00087</a> <a class="code" href="a00199.html">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00087"></a><a class="code" href="a00228.html#a0">00087</a> <a class="code" href="a00228.html">scoped_lock</a>() : my_mutex(NULL) {};
00088
00090
-<a name="l00091"></a><a class="code" href="a00199.html#a1">00091</a> <a class="code" href="a00199.html">scoped_lock</a>( <a class="code" href="a00198.html">mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00092 <a class="code" href="a00278.html#a37a1">acquire</a>( mutex );
+<a name="l00091"></a><a class="code" href="a00228.html#a1">00091</a> <a class="code" href="a00228.html">scoped_lock</a>( <a class="code" href="a00227.html">mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00092 <a class="code" href="a00318.html#a57a1">acquire</a>( mutex );
00093 }
00094
-<a name="l00096"></a><a class="code" href="a00199.html#a2">00096</a> ~<a class="code" href="a00199.html">scoped_lock</a>() {
+<a name="l00096"></a><a class="code" href="a00228.html#a2">00096</a> ~<a class="code" href="a00228.html">scoped_lock</a>() {
00097 <span class="keywordflow">if</span>( my_mutex )
-00098 <a class="code" href="a00278.html#a37a2">release</a>();
+00098 <a class="code" href="a00318.html#a57a2">release</a>();
00099 }
00100
-<a name="l00102"></a><a class="code" href="a00199.html#a3">00102</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( <a class="code" href="a00198.html">mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00103 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00102"></a><a class="code" href="a00228.html#a3">00102</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( <a class="code" href="a00227.html">mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00103 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00104 <span class="preprocessor"></span> internal_acquire(mutex);
00105 <span class="preprocessor">#else</span>
00106 <span class="preprocessor"></span> my_mutex = &mutex;
00107 <span class="preprocessor"> #if _WIN32||_WIN64</span>
-00108 <span class="preprocessor"></span> EnterCriticalSection(&mutex.<a class="code" href="a00198.html#r0">impl</a>);
+00108 <span class="preprocessor"></span> EnterCriticalSection(&mutex.<a class="code" href="a00227.html#r0">impl</a>);
00109 <span class="preprocessor"> #else</span>
-00110 <span class="preprocessor"></span> pthread_mutex_lock(&mutex.<a class="code" href="a00198.html#r0">impl</a>);
+00110 <span class="preprocessor"></span> pthread_mutex_lock(&mutex.<a class="code" href="a00227.html#r0">impl</a>);
00111 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00112 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00112 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00113 }
00114
-<a name="l00116"></a><a class="code" href="a00199.html#a4">00116</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00198.html">mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00117 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00116"></a><a class="code" href="a00228.html#a4">00116</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00227.html">mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00117 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00118 <span class="preprocessor"></span> <span class="keywordflow">return</span> internal_try_acquire (mutex);
00119 <span class="preprocessor">#else</span>
00120 <span class="preprocessor"></span> <span class="keywordtype">bool</span> result;
00121 <span class="preprocessor"> #if _WIN32||_WIN64</span>
-00122 <span class="preprocessor"></span> result = TryEnterCriticalSection(&mutex.<a class="code" href="a00198.html#r0">impl</a>)!=0;
+00122 <span class="preprocessor"></span> result = TryEnterCriticalSection(&mutex.<a class="code" href="a00227.html#r0">impl</a>)!=0;
00123 <span class="preprocessor"> #else</span>
-00124 <span class="preprocessor"></span> result = pthread_mutex_trylock(&mutex.<a class="code" href="a00198.html#r0">impl</a>)==0;
+00124 <span class="preprocessor"></span> result = pthread_mutex_trylock(&mutex.<a class="code" href="a00227.html#r0">impl</a>)==0;
00125 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00126 <span class="keywordflow">if</span>( result )
00127 my_mutex = &mutex;
00128 <span class="keywordflow">return</span> result;
-00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00130 }
00131
-<a name="l00133"></a><a class="code" href="a00199.html#a5">00133</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>() {
-00134 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00133"></a><a class="code" href="a00228.html#a5">00133</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {
+00134 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00135 <span class="preprocessor"></span> internal_release ();
00136 <span class="preprocessor">#else</span>
00137 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -136,17 +136,17 @@
00140 <span class="preprocessor"></span> pthread_mutex_unlock(&my_mutex->impl);
00141 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00142 my_mutex = NULL;
-00143 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00143 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00144 }
00145
00146 <span class="keyword">private</span>:
-00148 <a class="code" href="a00198.html">mutex</a>* my_mutex;
+00148 <a class="code" href="a00227.html">mutex</a>* my_mutex;
00149
-00151 <span class="keywordtype">void</span> internal_acquire( <a class="code" href="a00198.html">mutex</a>& m );
+00151 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00227.html">mutex</a>& m );
00152
-00154 <span class="keywordtype">bool</span> internal_try_acquire( <a class="code" href="a00198.html">mutex</a>& m );
+00154 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00227.html">mutex</a>& m );
00155
-00157 <span class="keywordtype">void</span> internal_release();
+00157 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
00158 };
00159
00160 <span class="comment">// Mutex traits</span>
@@ -166,17 +166,19 @@
00174 <span class="preprocessor"></span> pthread_mutex_t impl;
00175 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00176
-00178 <span class="keywordtype">void</span> internal_construct();
+00178 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
00179
-00181 <span class="keywordtype">void</span> internal_destroy();
+00181 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
00182 };
00183
-00184 } <span class="comment">// namespace tbb </span>
+00184 __TBB_DEFINE_PROFILING_SET_NAME(mutex)
00185
-00186 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
+00186 } <span class="comment">// namespace tbb </span>
+00187
+00188 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_mutex_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00283.html b/doc/html/a00333.html
similarity index 54%
copy from doc/html/a00283.html
copy to doc/html/a00333.html
index 23b7f23..657cb34 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00333.html
@@ -1,12 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>aligned_space.h Source File</title>
+<title>null_mutex.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>aligned_space.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>null_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -25,32 +25,39 @@
00018 <span class="comment"> writing.</span>
00019 <span class="comment">*/</span>
00020
-00021 <span class="preprocessor">#ifndef __TBB_aligned_space_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aligned_space_H</span>
+00021 <span class="preprocessor">#ifndef __TBB_null_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_mutex_H</span>
00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-00026
-<a name="l00027"></a><a class="code" href="a00278.html">00027</a> <span class="keyword">namespace </span>tbb {
-00028
-00030
-00032 <span class="keyword">template</span><<span class="keyword">typename</span> T,size_t N>
-<a name="l00033"></a><a class="code" href="a00164.html">00033</a> <span class="keyword">class </span><a class="code" href="a00164.html">aligned_space</a> {
-00034 <span class="keyword">private</span>:
-00035 <span class="keyword">typedef</span> __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
-00036 element_type array[(<span class="keyword">sizeof</span>(T)*N+<span class="keyword">sizeof</span>(element_type)-1)/<span class="keyword">sizeof</span>(element_type)];
-00037 <span class="keyword">public</span>:
-<a name="l00039"></a><a class="code" href="a00164.html#a0">00039</a> T* begin() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
-00040
-<a name="l00042"></a><a class="code" href="a00164.html#a1">00042</a> T* end() {<span class="keywordflow">return</span> begin()+N;}
-00043 };
-00044
-00045 } <span class="comment">// namespace tbb </span>
-00046
-00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
+00024 <span class="keyword">namespace </span>tbb {
+00025
+00026 <span class="keyword">class </span>null_mutex {
+00028 null_mutex( <span class="keyword">const</span> null_mutex& );
+00029 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> null_mutex& );
+00030 <span class="keyword">public</span>:
+00031 <span class="keyword">class </span>scoped_lock {
+00032 <span class="keyword">public</span>:
+00033 scoped_lock() {}
+00034 scoped_lock( null_mutex& ) {}
+00035 ~scoped_lock() {}
+00036 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( null_mutex& ) {}
+00037 <span class="keywordtype">bool</span> try_acquire( null_mutex& ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+00038 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {}
+00039 };
+00040
+00041 null_mutex() {}
+00042
+00043 <span class="comment">// Mutex traits </span>
+00044 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+00045 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+00046 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+00047 };
+00048
+00049 }
+00050
+00051 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_mutex_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00283.html b/doc/html/a00334.html
similarity index 50%
rename from doc/html/a00283.html
rename to doc/html/a00334.html
index 23b7f23..3b50c08 100644
--- a/doc/html/a00283.html
+++ b/doc/html/a00334.html
@@ -1,12 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>aligned_space.h Source File</title>
+<title>null_rw_mutex.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>aligned_space.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>null_rw_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -25,32 +25,41 @@
00018 <span class="comment"> writing.</span>
00019 <span class="comment">*/</span>
00020
-00021 <span class="preprocessor">#ifndef __TBB_aligned_space_H</span>
-00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_aligned_space_H</span>
+00021 <span class="preprocessor">#ifndef __TBB_null_rw_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_null_rw_mutex_H</span>
00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
-00025 <span class="preprocessor">#include "tbb_machine.h"</span>
-00026
-<a name="l00027"></a><a class="code" href="a00278.html">00027</a> <span class="keyword">namespace </span>tbb {
-00028
-00030
-00032 <span class="keyword">template</span><<span class="keyword">typename</span> T,size_t N>
-<a name="l00033"></a><a class="code" href="a00164.html">00033</a> <span class="keyword">class </span><a class="code" href="a00164.html">aligned_space</a> {
-00034 <span class="keyword">private</span>:
-00035 <span class="keyword">typedef</span> __TBB_TypeWithAlignmentAtLeastAsStrict(T) element_type;
-00036 element_type array[(<span class="keyword">sizeof</span>(T)*N+<span class="keyword">sizeof</span>(element_type)-1)/<span class="keyword">sizeof</span>(element_type)];
-00037 <span class="keyword">public</span>:
-<a name="l00039"></a><a class="code" href="a00164.html#a0">00039</a> T* begin() {<span class="keywordflow">return</span> reinterpret_cast<T*>(<span class="keyword">this</span>);}
-00040
-<a name="l00042"></a><a class="code" href="a00164.html#a1">00042</a> T* end() {<span class="keywordflow">return</span> begin()+N;}
-00043 };
-00044
-00045 } <span class="comment">// namespace tbb </span>
-00046
-00047 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_aligned_space_H */</span>
+00024 <span class="keyword">namespace </span>tbb {
+00025
+00026 <span class="keyword">class </span>null_rw_mutex {
+00028 null_rw_mutex( <span class="keyword">const</span> null_rw_mutex& );
+00029 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> null_rw_mutex& );
+00030 <span class="keyword">public</span>:
+00031 <span class="keyword">class </span>scoped_lock {
+00032 <span class="keyword">public</span>:
+00033 scoped_lock() {}
+00034 scoped_lock( null_rw_mutex& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+00035 ~scoped_lock() {}
+00036 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( null_rw_mutex& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) {}
+00037 <span class="keywordtype">bool</span> upgrade_to_writer() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+00038 <span class="keywordtype">bool</span> downgrade_to_reader() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+00039 <span class="keywordtype">bool</span> try_acquire( null_rw_mutex& , <span class="keywordtype">bool</span> = <span class="keyword">true</span> ) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }
+00040 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {}
+00041 };
+00042
+00043 null_rw_mutex() {}
+00044
+00045 <span class="comment">// Mutex traits </span>
+00046 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+00047 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">true</span>;
+00048 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+00049 };
+00050
+00051 }
+00052
+00053 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_null_rw_mutex_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00335.html b/doc/html/a00335.html
new file mode 100644
index 0000000..2c08b11
--- /dev/null
+++ b/doc/html/a00335.html
@@ -0,0 +1,468 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_do.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>parallel_do.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_parallel_do_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_do_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "task.h"</span>
+00025 <span class="preprocessor">#include "aligned_space.h"</span>
+00026 <span class="preprocessor">#include <iterator></span>
+00027
+00028 <span class="keyword">namespace </span>tbb {
+00029
+00031 <span class="keyword">namespace </span>internal {
+00032 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item> <span class="keyword">class </span>parallel_do_feeder_impl;
+00033 <span class="keyword">template</span><<span class="keyword">typename</span> Body> <span class="keyword">class </span>do_group_task;
+00034
+00036 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00037"></a><a class="code" href="a00259.html">00037</a> <span class="keyword">struct </span><a class="code" href="a00259.html">strip</a> { <span class="keyword">typedef</span> T type; };
+00038 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00039 <span class="keyword">struct </span><a class="code" href="a00259.html">strip</a><T&> { <span class="keyword">typedef</span> T type; };
+00040 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00041 <span class="keyword">struct </span>strip<const T&> { <span class="keyword">typedef</span> T type; };
+00042 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00043 <span class="keyword">struct </span>strip<volatile T&> { <span class="keyword">typedef</span> T type; };
+00044 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00045 <span class="keyword">struct </span>strip<const volatile T&> { <span class="keyword">typedef</span> T type; };
+00046 <span class="comment">// Most of the compilers remove cv-qualifiers from non-reference function argument types. </span>
+00047 <span class="comment">// But unfortunately there are those that don't.</span>
+00048 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00049 <span class="keyword">struct </span>strip<const T> { <span class="keyword">typedef</span> T type; };
+00050 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00051 <span class="keyword">struct </span>strip<volatile T> { <span class="keyword">typedef</span> T type; };
+00052 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+00053 <span class="keyword">struct </span>strip<const volatile T> { <span class="keyword">typedef</span> T type; };
+00054 } <span class="comment">// namespace internal</span>
+00056 <span class="comment"></span>
+00058
+00059 <span class="keyword">template</span><<span class="keyword">typename</span> Item>
+<a name="l00060"></a><a class="code" href="a00231.html">00060</a> <span class="keyword">class </span><a class="code" href="a00231.html">parallel_do_feeder</a>: internal::no_copy
+00061 {
+00062 <a class="code" href="a00231.html">parallel_do_feeder</a>() {}
+00063 <span class="keyword">virtual</span> ~<a class="code" href="a00231.html">parallel_do_feeder</a> () {}
+00064 <span class="keyword">virtual</span> <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item ) = 0;
+00065 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00232.html">internal::parallel_do_feeder_impl</a>;
+00066 <span class="keyword">public</span>:
+<a name="l00068"></a><a class="code" href="a00231.html#a0">00068</a> <span class="keywordtype">void</span> add( <span class="keyword">const</span> Item& item ) {internal_add(item);}
+00069 };
+00070
+00072 <span class="keyword">namespace </span>internal {
+00074
+00076 <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00077"></a><a class="code" href="a00233.html">00077</a> <span class="keyword">class </span><a class="code" href="a00233.html">parallel_do_operator_selector</a>
+00078 {
+00079 <span class="keyword">typedef</span> <a class="code" href="a00231.html">parallel_do_feeder<Item></a> <a class="code" href="a00231.html">Feeder</a>;
+00080 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
+00081 <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body& obj, A1& arg1, A2&, <span class="keywordtype">void</span> (Body::*)(CvItem) <span class="keyword">const</span> ) {
+00082 obj(arg1);
+00083 }
+00084 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2, <span class="keyword">typename</span> CvItem >
+00085 <span class="keyword">static</span> <span class="keywordtype">void</span> internal_call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2, <span class="keywordtype">void</span> (Body::*)(CvItem, <a class="code" href="a00231.html">parallel_do_feeder<Item></a>&) <span class="keyword">const</span> ) {
+00086 obj(arg1, arg2);
+00087 }
+00088
+00089 <span class="keyword">public</span>:
+00090 <span class="keyword">template</span><<span class="keyword">typename</span> A1, <span class="keyword">typename</span> A2 >
+00091 <span class="keyword">static</span> <span class="keywordtype">void</span> call( <span class="keyword">const</span> Body& obj, A1& arg1, A2& arg2 )
+00092 {
+00093 internal_call( obj, arg1, arg2, &Body::operator() );
+00094 }
+00095 };
+00096
+00098
+00100 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00101"></a><a class="code" href="a00213.html">00101</a> <span class="keyword">class </span><a class="code" href="a00213.html">do_iteration_task</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a>
+00102 {
+00103 <span class="keyword">typedef</span> <a class="code" href="a00232.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00232.html">feeder_type</a>;
+00104
+00105 Item my_value;
+00106 <a class="code" href="a00232.html">feeder_type</a>& my_feeder;
+00107
+00108 <a class="code" href="a00213.html">do_iteration_task</a>( <span class="keyword">const</span> Item& value, <a class="code" href="a00232.html">feeder_type</a>& feeder ) :
+00109 my_value(value), my_feeder(feeder)
+00110 {}
+00111
+00112 <span class="comment">/*override*/</span>
+00113 <a class="code" href="a00261.html">task</a>* execute()
+00114 {
+00115 <a class="code" href="a00233.html">parallel_do_operator_selector<Body, Item>::call</a>(*my_feeder.my_body, my_value, my_feeder);
+00116 <span class="keywordflow">return</span> NULL;
+00117 }
+00118
+00119 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00232.html">parallel_do_feeder_impl</a>;
+00120 }; <span class="comment">// class do_iteration_task</span>
+00121
+00122 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+00123 <span class="keyword">class </span>do_iteration_task_iter: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a>
+00124 {
+00125 <span class="keyword">typedef</span> <a class="code" href="a00232.html">parallel_do_feeder_impl<Body, Item></a> feeder_type;
+00126
+00127 Iterator my_iter;
+00128 feeder_type& my_feeder;
+00129
+00130 do_iteration_task_iter( <span class="keyword">const</span> Iterator& iter, feeder_type& feeder ) :
+00131 my_iter(iter), my_feeder(feeder)
+00132 {}
+00133
+00134 <span class="comment">/*override*/</span>
+00135 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00261.html#a1">execute</a>()
+00136 {
+00137 parallel_do_operator_selector<Body, Item>::call(*my_feeder.my_body, *my_iter, my_feeder);
+00138 <span class="keywordflow">return</span> NULL;
+00139 }
+00140
+00141 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_forward;
+00142 <span class="keyword">template</span><<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_group_task_input;
+00143 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
+00144 }; <span class="comment">// class do_iteration_task_iter</span>
+00145
+00147
+00149 <span class="keyword">template</span><<span class="keyword">class</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00150"></a><a class="code" href="a00232.html">00150</a> <span class="keyword">class </span><a class="code" href="a00232.html">parallel_do_feeder_impl</a> : <span class="keyword">public</span> <a class="code" href="a00231.html">parallel_do_feeder</a><Item>
+00151 {
+00152 <span class="comment">/*override*/</span>
+00153 <span class="keywordtype">void</span> internal_add( <span class="keyword">const</span> Item& item )
+00154 {
+00155 <span class="keyword">typedef</span> <a class="code" href="a00213.html">do_iteration_task<Body, Item></a> iteration_type;
+00156
+00157 iteration_type& t = *<span class="keyword">new</span> (task::self().allocate_additional_child_of(*my_barrier)) iteration_type(item, *<span class="keyword">this</span>);
+00158
+00159 t.<a class="code" href="a00261.html#a14">spawn</a>( t );
+00160 }
+00161 <span class="keyword">public</span>:
+00162 <span class="keyword">const</span> Body* my_body;
+00163 <a class="code" href="a00215.html">empty_task</a>* my_barrier;
+00164
+00165 <a class="code" href="a00232.html">parallel_do_feeder_impl</a>()
+00166 {
+00167 my_barrier = <span class="keyword">new</span>( task::allocate_root() ) <a class="code" href="a00215.html">empty_task</a>();
+00168 __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+00169 }
+00170
+00171 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00172 <span class="preprocessor"></span> <a class="code" href="a00232.html">parallel_do_feeder_impl</a>(<a class="code" href="a00262.html">tbb::task_group_context</a> &context)
+00173 {
+00174 my_barrier = <span class="keyword">new</span>( task::allocate_root(context) ) <a class="code" href="a00215.html">empty_task</a>();
+00175 __TBB_ASSERT(my_barrier, <span class="stringliteral">"root task allocation failed"</span>);
+00176 }
+00177 <span class="preprocessor">#endif</span>
+00178 <span class="preprocessor"></span>
+00179 ~<a class="code" href="a00232.html">parallel_do_feeder_impl</a>()
+00180 {
+00181 my_barrier-><a class="code" href="a00261.html#a5">destroy</a>(*my_barrier);
+00182 }
+00183 }; <span class="comment">// class parallel_do_feeder_impl</span>
+00184
+00185
+00187
+00190 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00191"></a><a class="code" href="a00212.html">00191</a> <span class="keyword">class </span><a class="code" href="a00212.html">do_group_task_forward</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a>
+00192 {
+00193 <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;
+00194
+00195 <span class="keyword">typedef</span> <a class="code" href="a00232.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00232.html">feeder_type</a>;
+00196
+00197 <a class="code" href="a00232.html">feeder_type</a>& my_feeder;
+00198 Iterator my_first;
+00199 size_t my_size;
+00200
+00201 <a class="code" href="a00212.html">do_group_task_forward</a>( Iterator first, size_t size, <a class="code" href="a00232.html">feeder_type</a>& feeder )
+00202 : my_feeder(feeder), my_first(first), my_size(size)
+00203 {}
+00204
+00205 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute()
+00206 {
+00207 <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+00208 __TBB_ASSERT( my_size>0, NULL );
+00209 <a class="code" href="a00263.html">task_list</a> list;
+00210 <a class="code" href="a00261.html">task</a>* t;
+00211 size_t k=0;
+00212 <span class="keywordflow">for</span>(;;) {
+00213 t = <span class="keyword">new</span>( allocate_child() ) iteration_type( my_first, my_feeder );
+00214 ++my_first;
+00215 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+00216 list.<a class="code" href="a00263.html#a3">push_back</a>(*t);
+00217 }
+00218 set_ref_count(<span class="keywordtype">int</span>(k+1));
+00219 spawn(list);
+00220 spawn_and_wait_for_all(*t);
+00221 <span class="keywordflow">return</span> NULL;
+00222 }
+00223
+00224 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> _Item> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00214.html">do_task_iter</a>;
+00225 }; <span class="comment">// class do_group_task_forward</span>
+00226
+00227 <span class="keyword">template</span><<span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+00228 <span class="keyword">class </span>do_group_task_input: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a>
+00229 {
+00230 <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;
+00231
+00232 <span class="keyword">typedef</span> <a class="code" href="a00232.html">parallel_do_feeder_impl<Body, Item></a> feeder_type;
+00233
+00234 feeder_type& my_feeder;
+00235 size_t my_size;
+00236 <a class="code" href="a00190.html">aligned_space<Item, max_arg_size></a> my_arg;
+00237
+00238 do_group_task_input( feeder_type& feeder )
+00239 : my_feeder(feeder), my_size(0)
+00240 {}
+00241
+00242 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* <a class="code" href="a00261.html#a1">execute</a>()
+00243 {
+00244 <span class="keyword">typedef</span> do_iteration_task_iter<Item*, Body, Item> iteration_type;
+00245 __TBB_ASSERT( my_size>0, NULL );
+00246 <a class="code" href="a00263.html">task_list</a> list;
+00247 <a class="code" href="a00261.html">task</a>* t;
+00248 size_t k=0;
+00249 <span class="keywordflow">for</span>(;;) {
+00250 t = <span class="keyword">new</span>( <a class="code" href="a00261.html#a3">allocate_child</a>() ) iteration_type( my_arg.begin() + k, my_feeder );
+00251 <span class="keywordflow">if</span>( ++k==my_size ) <span class="keywordflow">break</span>;
+00252 list.<a class="code" href="a00263.html#a3">push_back</a>(*t);
+00253 }
+00254 <a class="code" href="a00261.html#a13">set_ref_count</a>(<span class="keywordtype">int</span>(k+1));
+00255 <a class="code" href="a00261.html#a14">spawn</a>(list);
+00256 <a class="code" href="a00261.html#a16">spawn_and_wait_for_all</a>(*t);
+00257 <span class="keywordflow">return</span> NULL;
+00258 }
+00259
+00260 ~do_group_task_input(){
+00261 <span class="keywordflow">for</span>( size_t k=0; k<my_size; ++k)
+00262 (my_arg.begin() + k)->~Item();
+00263 }
+00264
+00265 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator_, <span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Item_> <span class="keyword">friend</span> <span class="keyword">class </span>do_task_iter;
+00266 }; <span class="comment">// class do_group_task_input</span>
+00267
+00269
+00271 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00272"></a><a class="code" href="a00214.html">00272</a> <span class="keyword">class </span><a class="code" href="a00214.html">do_task_iter</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a>
+00273 {
+00274 <span class="comment">//typedef typename std::iterator_traits<Iterator>::value_type Item;</span>
+00275 <span class="keyword">typedef</span> <a class="code" href="a00232.html">parallel_do_feeder_impl<Body, Item></a> <a class="code" href="a00232.html">feeder_type</a>;
+00276
+00277 <span class="keyword">public</span>:
+00278 <a class="code" href="a00214.html">do_task_iter</a>( Iterator first, Iterator last , <a class="code" href="a00232.html">feeder_type</a>& feeder ) :
+00279 my_first(first), my_last(last), my_feeder(feeder)
+00280 {}
+00281
+00282 <span class="keyword">private</span>:
+00283 Iterator my_first;
+00284 Iterator my_last;
+00285 <a class="code" href="a00232.html">feeder_type</a>& my_feeder;
+00286
+00287 <span class="comment">/* Do not merge run(xxx) and run_xxx() methods. They are separated in order</span>
+00288 <span class="comment"> to make sure that compilers will eliminate unused argument of type xxx</span>
+00289 <span class="comment"> (that is will not put it on stack). The sole purpose of this argument </span>
+00290 <span class="comment"> is overload resolution.</span>
+00291 <span class="comment"> </span>
+00292 <span class="comment"> An alternative could be using template functions, but explicit specialization </span>
+00293 <span class="comment"> of member function templates is not supported for non specialized class </span>
+00294 <span class="comment"> templates. Besides template functions would always fall back to the least </span>
+00295 <span class="comment"> efficient variant (the one for input iterators) in case of iterators having </span>
+00296 <span class="comment"> custom tags derived from basic ones. */</span>
+00297 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute()
+00298 {
+00299 <span class="keyword">typedef</span> <span class="keyword">typename</span> std::iterator_traits<Iterator>::iterator_category iterator_tag;
+00300 <span class="keywordflow">return</span> run( (iterator_tag*)NULL );
+00301 }
+00302
+00305 <span class="keyword">inline</span> <a class="code" href="a00261.html">task</a>* run( <span class="keywordtype">void</span>* ) { <span class="keywordflow">return</span> run_for_input_iterator(); }
+00306
+00307 <a class="code" href="a00261.html">task</a>* run_for_input_iterator() {
+00308 <span class="keyword">typedef</span> do_group_task_input<Body, Item> block_type;
+00309
+00310 block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(my_feeder);
+00311 size_t k=0;
+00312 <span class="keywordflow">while</span>( !(my_first == my_last) ) {
+00313 <span class="keyword">new</span> (t.my_arg.begin() + k) Item(*my_first);
+00314 ++my_first;
+00315 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+00316 <span class="keywordflow">if</span> ( !(my_first == my_last) )
+00317 recycle_to_reexecute();
+00318 <span class="keywordflow">break</span>;
+00319 }
+00320 }
+00321 <span class="keywordflow">if</span>( k==0 ) {
+00322 destroy(t);
+00323 <span class="keywordflow">return</span> NULL;
+00324 } <span class="keywordflow">else</span> {
+00325 t.my_size = k;
+00326 <span class="keywordflow">return</span> &t;
+00327 }
+00328 }
+00329
+00330 <span class="keyword">inline</span> <a class="code" href="a00261.html">task</a>* run( std::forward_iterator_tag* ) { <span class="keywordflow">return</span> run_for_forward_iterator(); }
+00331
+00332 <a class="code" href="a00261.html">task</a>* run_for_forward_iterator() {
+00333 <span class="keyword">typedef</span> <a class="code" href="a00212.html">do_group_task_forward<Iterator, Body, Item></a> block_type;
+00334
+00335 Iterator first = my_first;
+00336 size_t k=0;
+00337 <span class="keywordflow">while</span>( !(my_first==my_last) ) {
+00338 ++my_first;
+00339 <span class="keywordflow">if</span>( ++k==block_type::max_arg_size ) {
+00340 <span class="keywordflow">if</span> ( !(my_first==my_last) )
+00341 recycle_to_reexecute();
+00342 <span class="keywordflow">break</span>;
+00343 }
+00344 }
+00345 <span class="keywordflow">return</span> k==0 ? NULL : <span class="keyword">new</span>( allocate_additional_child_of(*my_feeder.my_barrier) ) block_type(first, k, my_feeder);
+00346 }
+00347
+00348 <span class="keyword">inline</span> <a class="code" href="a00261.html">task</a>* run( std::random_access_iterator_tag* ) { <span class="keywordflow">return</span> run_for_random_access_iterator(); }
+00349
+00350 <a class="code" href="a00261.html">task</a>* run_for_random_access_iterator() {
+00351 <span class="keyword">typedef</span> <a class="code" href="a00212.html">do_group_task_forward<Iterator, Body, Item></a> block_type;
+00352 <span class="keyword">typedef</span> do_iteration_task_iter<Iterator, Body, Item> iteration_type;
+00353
+00354 size_t k = static_cast<size_t>(my_last-my_first);
+00355 <span class="keywordflow">if</span>( k > block_type::max_arg_size ) {
+00356 Iterator middle = my_first + k/2;
+00357
+00358 <a class="code" href="a00215.html">empty_task</a>& c = *<span class="keyword">new</span>( allocate_continuation() ) <a class="code" href="a00215.html">empty_task</a>;
+00359 <a class="code" href="a00214.html">do_task_iter</a>& b = *<span class="keyword">new</span>( c.<a class="code" href="a00261.html#a3">allocate_child</a>() ) <a class="code" href="a00214.html">do_task_iter</a>(middle, my_last, my_feeder);
+00360 recycle_as_child_of(c);
+00361
+00362 my_last = middle;
+00363 c.<a class="code" href="a00261.html#a13">set_ref_count</a>(2);
+00364 c.<a class="code" href="a00261.html#a14">spawn</a>(b);
+00365 <span class="keywordflow">return</span> <span class="keyword">this</span>;
+00366 }<span class="keywordflow">else</span> <span class="keywordflow">if</span>( k != 0 ) {
+00367 <a class="code" href="a00263.html">task_list</a> list;
+00368 <a class="code" href="a00261.html">task</a>* t;
+00369 size_t k1=0;
+00370 <span class="keywordflow">for</span>(;;) {
+00371 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_first, my_feeder);
+00372 ++my_first;
+00373 <span class="keywordflow">if</span>( ++k1==k ) <span class="keywordflow">break</span>;
+00374 list.<a class="code" href="a00263.html#a3">push_back</a>(*t);
+00375 }
+00376 set_ref_count(<span class="keywordtype">int</span>(k+1));
+00377 spawn(list);
+00378 spawn_and_wait_for_all(*t);
+00379 }
+00380 <span class="keywordflow">return</span> NULL;
+00381 }
+00382 }; <span class="comment">// class do_task_iter</span>
+00383
+00385
+00387 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00388"></a><a class="code" href="a00321.html#ga0">00388</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga0">run_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body
+00389 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+00390 , task_group_context& context
+00391 #endif
+00392 )
+00393 {
+00394 <span class="keyword">typedef</span> do_task_iter<Iterator, Body, Item> root_iteration_task;
+00395 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00396 <span class="preprocessor"></span> parallel_do_feeder_impl<Body, Item> feeder(context);
+00397 <span class="preprocessor">#else</span>
+00398 <span class="preprocessor"></span> parallel_do_feeder_impl<Body, Item> feeder;
+00399 <span class="preprocessor">#endif</span>
+00400 <span class="preprocessor"></span> feeder.my_body = &body;
+00401
+00402 root_iteration_task &t = *<span class="keyword">new</span>( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
+00403
+00404 feeder.my_barrier->set_ref_count(2);
+00405 feeder.my_barrier->spawn_and_wait_for_all(t);
+00406 }
+00407
+00409
+00411 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item>
+<a name="l00412"></a><a class="code" href="a00321.html#ga1">00412</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga2">select_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item) <span class="keyword">const</span>
+00413 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+00414 , task_group_context& context
+00415 #endif <span class="comment">// __TBB_EXCEPTIONS </span>
+00416 )
+00417 {
+00418 run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+00419 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00420 <span class="preprocessor"></span> , context
+00421 <span class="preprocessor">#endif // __TBB_EXCEPTIONS </span>
+00422 <span class="preprocessor"></span> );
+00423 }
+00424
+00426
+00428 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Item, <span class="keyword">typename</span> _Item>
+<a name="l00429"></a><a class="code" href="a00321.html#ga2">00429</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga2">select_parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, <span class="keywordtype">void</span> (Body::*)(Item, parallel_do_feeder<_Item>&) <span class="keyword">const</span>
+00430 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+00431 , task_group_context& context
+00432 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+00433 )
+00434 {
+00435 run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+00436 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00437 <span class="preprocessor"></span> , context
+00438 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+00439 <span class="preprocessor"></span> );
+00440 }
+00441
+00442 } <span class="comment">// namespace internal</span>
+00444 <span class="comment"></span>
+00445
+00468
+00469
+00470 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body>
+<a name="l00471"></a><a class="code" href="a00321.html#ga3">00471</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga4">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body )
+00472 {
+00473 <span class="keywordflow">if</span> ( first == last )
+00474 <span class="keywordflow">return</span>;
+00475 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00476 <span class="preprocessor"></span> task_group_context context;
+00477 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+00478 <span class="preprocessor"></span> <a class="code" href="a00321.html#ga2">internal::select_parallel_do</a>( first, last, body, &Body::operator()
+00479 #<span class="keywordflow">if</span> __TBB_EXCEPTIONS
+00480 , context
+00481 #endif <span class="comment">// __TBB_EXCEPTIONS</span>
+00482 );
+00483 }
+00484
+00485 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00486 <span class="preprocessor"></span>
+00487
+00488 <span class="keyword">template</span><<span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> Body>
+<a name="l00489"></a><a class="code" href="a00321.html#ga4">00489</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga4">parallel_do</a>( Iterator first, Iterator last, <span class="keyword">const</span> Body& body, task_group_context& context )
+00490 {
+00491 <span class="keywordflow">if</span> ( first == last )
+00492 <span class="keywordflow">return</span>;
+00493 <a class="code" href="a00321.html#ga2">internal::select_parallel_do</a>( first, last, body, &Body::operator(), context );
+00494 }
+00495 <span class="preprocessor">#endif // __TBB_EXCEPTIONS</span>
+00496 <span class="preprocessor"></span>
+00498
+00499 } <span class="comment">// namespace </span>
+00500
+00501 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_do_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00294.html b/doc/html/a00336.html
similarity index 77%
rename from doc/html/a00294.html
rename to doc/html/a00336.html
index 29c2972..94c9e2d 100644
--- a/doc/html/a00294.html
+++ b/doc/html/a00336.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>parallel_for.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -38,47 +38,47 @@
00032
00034
00035 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-<a name="l00036"></a><a class="code" href="a00222.html">00036</a> <span class="keyword">class </span><a class="code" href="a00222.html">start_for</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
+<a name="l00036"></a><a class="code" href="a00255.html">00036</a> <span class="keyword">class </span><a class="code" href="a00255.html">start_for</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
00037 Range my_range;
00038 <span class="keyword">const</span> Body my_body;
00039 <span class="keyword">typename</span> Partitioner::partition_type my_partition;
-00040 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute();
+00040 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute();
00041
-00043 <a class="code" href="a00222.html">start_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
+00043 <a class="code" href="a00255.html">start_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, Partitioner& partitioner ) :
00044 my_range(range),
00045 my_body(body),
00046 my_partition(partitioner)
00047 {
00048 }
00050
-00051 <a class="code" href="a00222.html">start_for</a>( <a class="code" href="a00222.html">start_for</a>& parent, <a class="code" href="a00221.html">split</a> ) :
-00052 my_range(parent.<a class="code" href="a00222.html#r0">my_range</a>,<a class="code" href="a00221.html">split</a>()),
-00053 my_body(parent.<a class="code" href="a00222.html#r1">my_body</a>),
-00054 my_partition(parent.<a class="code" href="a00222.html#r2">my_partition</a>,<a class="code" href="a00221.html">split</a>())
+00051 <a class="code" href="a00255.html">start_for</a>( <a class="code" href="a00255.html">start_for</a>& parent, <a class="code" href="a00254.html">split</a> ) :
+00052 my_range(parent.<a class="code" href="a00255.html#r0">my_range</a>,<a class="code" href="a00254.html">split</a>()),
+00053 my_body(parent.<a class="code" href="a00255.html#r1">my_body</a>),
+00054 my_partition(parent.<a class="code" href="a00255.html#r2">my_partition</a>,<a class="code" href="a00254.html">split</a>())
00055 {
00056 my_partition.set_affinity(*<span class="keyword">this</span>);
00057 }
-00059 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00279.html#a12">affinity_id</a> <span class="keywordtype">id</span> ) {
+00059 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00319.html#a11">affinity_id</a> <span class="keywordtype">id</span> ) {
00060 my_partition.note_affinity( <span class="keywordtype">id</span> );
00061 }
00062 <span class="keyword">public</span>:
00063 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner ) {
00064 <span class="keywordflow">if</span>( !range.empty() ) {
00065 <span class="preprocessor">#if !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP</span>
-00066 <span class="preprocessor"></span> <a class="code" href="a00222.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00222.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
+00066 <span class="preprocessor"></span> <a class="code" href="a00255.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00255.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
00067 <span class="preprocessor">#else</span>
00068 <span class="preprocessor"></span> <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
00069 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
-00070 task_group_context context;
-00071 <a class="code" href="a00222.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00222.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
+00070 <a class="code" href="a00262.html">task_group_context</a> context;
+00071 <a class="code" href="a00255.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00255.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
00072 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
00073 task::spawn_root_and_wait(a);
00074 }
00075 }
00076 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00077 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner, task_group_context& context ) {
+00077 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> Partitioner& partitioner, <a class="code" href="a00262.html">task_group_context</a>& context ) {
00078 <span class="keywordflow">if</span>( !range.empty() ) {
-00079 <a class="code" href="a00222.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00222.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
+00079 <a class="code" href="a00255.html">start_for</a>& a = *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00255.html">start_for</a>(range,body,const_cast<Partitioner&>(partitioner));
00080 task::spawn_root_and_wait(a);
00081 }
00082 }
@@ -86,16 +86,16 @@
00084 };
00085
00086 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-00087 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00222.html">start_for<Range,Body,Partitioner>::execute</a>() {
+00087 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00255.html">start_for<Range,Body,Partitioner>::execute</a>() {
00088 <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
00089 my_body( my_range );
00090 <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
00091 } <span class="keywordflow">else</span> {
-00092 <a class="code" href="a00188.html">empty_task</a>& c = *<span class="keyword">new</span>( this-><a class="code" href="a00228.html#a2">allocate_continuation</a>() ) <a class="code" href="a00188.html">empty_task</a>;
-00093 <a class="code" href="a00228.html#a8">recycle_as_child_of</a>(c);
-00094 c.<a class="code" href="a00228.html#a13">set_ref_count</a>(2);
+00092 <a class="code" href="a00215.html">empty_task</a>& c = *<span class="keyword">new</span>( this-><a class="code" href="a00261.html#a2">allocate_continuation</a>() ) <a class="code" href="a00215.html">empty_task</a>;
+00093 <a class="code" href="a00261.html#a8">recycle_as_child_of</a>(c);
+00094 c.<a class="code" href="a00261.html#a13">set_ref_count</a>(2);
00095 <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
-00096 start_for& b = *<span class="keyword">new</span>( c.<a class="code" href="a00228.html#a3">allocate_child</a>() ) start_for(*<span class="keyword">this</span>,<a class="code" href="a00221.html">split</a>());
+00096 start_for& b = *<span class="keyword">new</span>( c.<a class="code" href="a00261.html#a3">allocate_child</a>() ) start_for(*<span class="keyword">this</span>,<a class="code" href="a00254.html">split</a>());
00097 my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
00098 <span class="keywordflow">return</span> <span class="keyword">this</span>;
00099 }
@@ -108,19 +108,19 @@
00117
00119
00120 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00121"></a><a class="code" href="a00281.html#ga4">00121</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> simple_partitioner& partitioner=simple_partitioner() ) {
+<a name="l00121"></a><a class="code" href="a00321.html#ga5">00121</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> simple_partitioner& partitioner=simple_partitioner() ) {
00122 internal::start_for<Range,Body,simple_partitioner>::run(range,body,partitioner);
00123 }
00124
00126
00127 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00128"></a><a class="code" href="a00281.html#ga5">00128</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
+<a name="l00128"></a><a class="code" href="a00321.html#ga6">00128</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
00129 internal::start_for<Range,Body,auto_partitioner>::run(range,body,partitioner);
00130 }
00131
00133
00134 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00135"></a><a class="code" href="a00281.html#ga6">00135</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, affinity_partitioner& partitioner ) {
+<a name="l00135"></a><a class="code" href="a00321.html#ga7">00135</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, affinity_partitioner& partitioner ) {
00136 internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner);
00137 }
00138
@@ -128,19 +128,19 @@
00140 <span class="preprocessor"></span>
00141
00142 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00143 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> simple_partitioner& partitioner, task_group_context& context ) {
+<a name="l00143"></a><a class="code" href="a00321.html#ga8">00143</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> simple_partitioner& partitioner, task_group_context& context ) {
00144 internal::start_for<Range,Body,simple_partitioner>::run(range, body, partitioner, context);
00145 }
00146
00148
00149 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00150 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> auto_partitioner& partitioner, task_group_context& context ) {
+<a name="l00150"></a><a class="code" href="a00321.html#ga9">00150</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, <span class="keyword">const</span> auto_partitioner& partitioner, task_group_context& context ) {
00151 internal::start_for<Range,Body,auto_partitioner>::run(range, body, partitioner, context);
00152 }
00153
00155
00156 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-00157 <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga4">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
+<a name="l00157"></a><a class="code" href="a00321.html#ga10">00157</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga5">parallel_for</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
00158 internal::start_for<Range,Body,affinity_partitioner>::run(range,body,partitioner, context);
00159 }
00160 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
@@ -152,7 +152,7 @@
00166
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00337.html b/doc/html/a00337.html
new file mode 100644
index 0000000..9d30864
--- /dev/null
+++ b/doc/html/a00337.html
@@ -0,0 +1,424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_reduce.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>parallel_reduce.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_parallel_reduce_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_reduce_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "task.h"</span>
+00025 <span class="preprocessor">#include "aligned_space.h"</span>
+00026 <span class="preprocessor">#include "partitioner.h"</span>
+00027 <span class="preprocessor">#include <new></span>
+00028
+00029 <span class="keyword">namespace </span>tbb {
+00030
+00032 <span class="keyword">namespace </span>internal {
+00033
+00035 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a55">itt_store_pointer_with_release_v3</a>( <span class="keywordtype">void</span>* dst, <span class="keywordtype">void</span>* src );
+00036
+00038 <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a56">itt_load_pointer_with_acquire_v3</a>( <span class="keyword">const</span> <span class="keywordtype">void</span>* src );
+00039
+00040 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> <span class="keywordtype">void</span> parallel_reduce_store_body( T*& dst, T* src ) {
+00041 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00042 <span class="preprocessor"></span> <a class="code" href="a00319.html#a55">itt_store_pointer_with_release_v3</a>(&dst,src);
+00043 <span class="preprocessor">#else</span>
+00044 <span class="preprocessor"></span> __TBB_store_with_release(dst,src);
+00045 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+00046 }
+00047
+00048 <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> T* parallel_reduce_load_body( T*& src ) {
+00049 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00050 <span class="preprocessor"></span> <span class="keywordflow">return</span> static_cast<T*>(<a class="code" href="a00319.html#a56">itt_load_pointer_with_acquire_v3</a>(&src));
+00051 <span class="preprocessor">#else</span>
+00052 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_load_with_acquire(src);
+00053 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
+00054 }
+00055
+00057
+00058 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00059"></a><a class="code" href="a00219.html">00059</a> <span class="keyword">class </span><a class="code" href="a00219.html">finish_reduce</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00060 Body* <span class="keyword">const</span> my_body;
+00061 <span class="keywordtype">bool</span> has_right_zombie;
+00062 <a class="code" href="a00190.html">aligned_space<Body,1></a> zombie_space;
+00063 <a class="code" href="a00219.html">finish_reduce</a>( Body* body ) :
+00064 my_body(body),
+00065 has_right_zombie(<span class="keyword">false</span>)
+00066 {
+00067 }
+00068 <a class="code" href="a00261.html">task</a>* execute() {
+00069 <span class="keywordflow">if</span>( has_right_zombie ) {
+00070 <span class="comment">// Right child was stolen.</span>
+00071 Body* s = zombie_space.begin();
+00072 my_body->join( *s );
+00073 s->~Body();
+00074 }
+00075 <span class="keywordflow">return</span> NULL;
+00076 }
+00077 <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_, <span class="keyword">typename</span> Partitioner>
+00078 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00256.html">start_reduce</a>;
+00079 };
+00080
+00082
+00083 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
+<a name="l00084"></a><a class="code" href="a00256.html">00084</a> <span class="keyword">class </span><a class="code" href="a00256.html">start_reduce</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00085 <span class="keyword">typedef</span> <a class="code" href="a00219.html">finish_reduce<Body></a> <a class="code" href="a00219.html">finish_type</a>;
+00086 Body* my_body;
+00087 Range my_range;
+00088 <span class="keyword">typename</span> Partitioner::partition_type my_partition;
+00089 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute();
+00090 <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
+00091 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00219.html">finish_reduce</a>;
+00092
+00094 <a class="code" href="a00256.html">start_reduce</a>( <span class="keyword">const</span> Range& range, Body* body, <span class="keyword">const</span> Partitioner &partitioner ) :
+00095 my_body(body),
+00096 my_range(range),
+00097 my_partition(partitioner)
+00098 {
+00099 }
+00101
+00102 <a class="code" href="a00256.html">start_reduce</a>( <a class="code" href="a00256.html">start_reduce</a>& parent, <a class="code" href="a00254.html">split</a> ) :
+00103 my_body(parent.<a class="code" href="a00256.html#r0">my_body</a>),
+00104 my_range(parent.<a class="code" href="a00256.html#r1">my_range</a>,<a class="code" href="a00254.html">split</a>()),
+00105 my_partition(parent.<a class="code" href="a00256.html#r2">my_partition</a>,<a class="code" href="a00254.html">split</a>())
+00106 {
+00107 }
+00109
+00110 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> note_affinity( <a class="code" href="a00319.html#a11">affinity_id</a> <span class="comment">/*id*/</span> ) {
+00111 <a class="code" href="a00219.html">finish_type</a>* p = static_cast<finish_type*>(parent() );
+00112 Body* body = <span class="keyword">new</span>( p-><a class="code" href="a00219.html#r2">zombie_space</a>.<a class="code" href="a00190.html#a0">begin</a>() ) Body(*my_body,<a class="code" href="a00254.html">split</a>());
+00113 p-><a class="code" href="a00219.html#r1">has_right_zombie</a> = <span class="keyword">true</span>;
+00114 my_body = body;
+00115 }
+00116 <span class="keyword">public</span>:
+00117 <span class="preprocessor">#if !__TBB_EXCEPTIONS</span>
+00118 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner ) {
+00119 <span class="keywordflow">if</span>( !range.empty() )
+00120 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00256.html">start_reduce</a>(range,&body,partitioner) );
+00121 }
+00122 <span class="preprocessor">#else </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00123 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner ) {
+00124 <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+00125 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+00126 <span class="keywordflow">if</span>( !range.empty() ) {
+00127 <a class="code" href="a00262.html">task_group_context</a> context;
+00128 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00256.html">start_reduce</a>(range,&body,partitioner) );
+00129 }
+00130 }
+00131 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner &partitioner, <a class="code" href="a00262.html">task_group_context</a>& context ) {
+00132 <span class="keywordflow">if</span>( !range.empty() )
+00133 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00256.html">start_reduce</a>(range,&body,partitioner) );
+00134 }
+00135 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00136 };
+00137
+00138 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
+00139 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00256.html">start_reduce<Range,Body,Partitioner>::execute</a>() {
+00140 <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+00141 (*my_body)( my_range );
+00142 <span class="keywordflow">return</span> NULL;
+00143 } <span class="keywordflow">else</span> {
+00144 finish_type& c = *<span class="keyword">new</span>( <a class="code" href="a00261.html#a2">allocate_continuation</a>()) finish_type(my_body);
+00145 <a class="code" href="a00261.html#a8">recycle_as_child_of</a>(c);
+00146 c.<a class="code" href="a00261.html#a13">set_ref_count</a>(2);
+00147 start_reduce& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce(*<span class="keyword">this</span>,<a class="code" href="a00254.html">split</a>());
+00148 <a class="code" href="a00261.html#a14">spawn</a>(b);
+00149 <span class="keywordflow">return</span> <span class="keyword">this</span>;
+00150 }
+00151 }
+00152
+00154
+<a name="l00155"></a><a class="code" href="a00319.html#a7">00155</a> <span class="keyword">typedef</span> <span class="keywordtype">char</span> reduction_context;
+00156
+00158
+00159 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
+<a name="l00160"></a><a class="code" href="a00220.html">00160</a> <span class="keyword">class </span><a class="code" href="a00220.html">finish_reduce_with_affinity</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00162 Body* my_body;
+00163 <span class="keywordtype">bool</span> has_right_zombie;
+00164 <span class="keyword">const</span> <a class="code" href="a00319.html#a7">reduction_context</a> my_context;
+00165 <a class="code" href="a00190.html">aligned_space<Body,1></a> zombie_space;
+00166 <a class="code" href="a00220.html">finish_reduce_with_affinity</a>( <span class="keywordtype">char</span> context ) :
+00167 my_body(NULL),
+00168 has_right_zombie(<span class="keyword">false</span>),
+00169 my_context(context)
+00170 {
+00171 }
+00172 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00261.html#a1">execute</a>() {
+00173 <span class="keywordflow">if</span>( has_right_zombie ) {
+00174 <span class="comment">// Right child was stolen.</span>
+00175 Body* s = zombie_space.<a class="code" href="a00190.html#a0">begin</a>();
+00176 my_body->join( *s );
+00177 s->~Body();
+00178 }
+00179 <span class="keywordflow">if</span>( my_context==1 )
+00180 parallel_reduce_store_body( static_cast<finish_reduce_with_affinity*>(<a class="code" href="a00261.html#a19">parent</a>())->my_body, my_body );
+00181 <span class="keywordflow">return</span> NULL;
+00182 }
+00183 <span class="keyword">template</span><<span class="keyword">typename</span> Range,<span class="keyword">typename</span> Body_>
+00184 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00257.html">start_reduce_with_affinity</a>;
+00185 };
+00186
+00188
+00189 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00190"></a><a class="code" href="a00257.html">00190</a> <span class="keyword">class </span><a class="code" href="a00257.html">start_reduce_with_affinity</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00191 <span class="keyword">typedef</span> <a class="code" href="a00220.html">finish_reduce_with_affinity<Body></a> <a class="code" href="a00220.html">finish_type</a>;
+00192 Body* my_body;
+00193 Range my_range;
+00194 <span class="keyword">typename</span> affinity_partitioner::partition_type my_partition;
+00195 <a class="code" href="a00319.html#a7">reduction_context</a> my_context;
+00196 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* <a class="code" href="a00261.html#a1">execute</a>();
+00197 <span class="keyword">template</span><<span class="keyword">typename</span> Body_>
+00198 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00220.html">finish_reduce_with_affinity</a>;
+00199
+00201 <a class="code" href="a00257.html">start_reduce_with_affinity</a>( <span class="keyword">const</span> Range& range, Body* body, <a class="code" href="a00188.html">affinity_partitioner</a>& partitioner ) :
+00202 my_body(body),
+00203 my_range(range),
+00204 my_partition(partitioner),
+00205 my_context(0)
+00206 {
+00207 }
+00209
+00210 <a class="code" href="a00257.html">start_reduce_with_affinity</a>( <a class="code" href="a00257.html">start_reduce_with_affinity</a>& parent, <a class="code" href="a00254.html">split</a> ) :
+00211 my_body(parent.<a class="code" href="a00257.html#r0">my_body</a>),
+00212 my_range(parent.<a class="code" href="a00257.html#r1">my_range</a>,<a class="code" href="a00254.html">split</a>()),
+00213 my_partition(parent.<a class="code" href="a00257.html#r2">my_partition</a>,<a class="code" href="a00254.html">split</a>()),
+00214 my_context(2)
+00215 {
+00216 my_partition.<a class="code" href="a00261.html#a24">set_affinity</a>(*<span class="keyword">this</span>);
+00217 parent.<a class="code" href="a00257.html#r3">my_context</a> = 1;
+00218 }
+00220 <span class="comment">/*override*/</span> <span class="keywordtype">void</span> <a class="code" href="a00261.html#a26">note_affinity</a>( affinity_id <span class="keywordtype">id</span> ) {
+00221 my_partition.<a class="code" href="a00257.html#d3">note_affinity</a>( <span class="keywordtype">id</span> );
+00222 }
+00223
+00224 <span class="keyword">public</span>:
+00225 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00188.html">affinity_partitioner</a>& partitioner ) {
+00226 <span class="keywordflow">if</span>( !range.empty() ) {
+00227 <span class="preprocessor">#if !__TBB_EXCEPTIONS || TBB_JOIN_OUTER_TASK_GROUP</span>
+00228 <span class="preprocessor"></span> task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root()) <a class="code" href="a00257.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
+00229 <span class="preprocessor">#else</span>
+00230 <span class="preprocessor"></span> <span class="comment">// Bound context prevents exceptions from body to affect nesting or sibling algorithms,</span>
+00231 <span class="comment">// and allows users to handle exceptions safely by wrapping parallel_for in the try-block.</span>
+00232 <a class="code" href="a00262.html">task_group_context</a> context;
+00233 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00257.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
+00234 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS && !TBB_JOIN_OUTER_TASK_GROUP */</span>
+00235 }
+00236 }
+00237 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00238 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <a class="code" href="a00188.html">affinity_partitioner</a>& partitioner, <a class="code" href="a00262.html">task_group_context</a>& context ) {
+00239 <span class="keywordflow">if</span>( !range.empty() )
+00240 task::spawn_root_and_wait( *<span class="keyword">new</span>(task::allocate_root(context)) <a class="code" href="a00257.html">start_reduce_with_affinity</a>(range,&body,partitioner) );
+00241 }
+00242 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00243 };
+00244
+00245 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+00246 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00257.html">start_reduce_with_affinity<Range,Body>::execute</a>() {
+00247 <span class="keywordflow">if</span>( my_context==2 ) {
+00248 finish_type* p = static_cast<finish_type*>(<a class="code" href="a00261.html#a19">parent</a>() );
+00249 <span class="keywordflow">if</span>( !parallel_reduce_load_body(p->my_body) ) {
+00250 my_body = <span class="keyword">new</span>( p->zombie_space.begin() ) Body(*my_body,<a class="code" href="a00254.html">split</a>());
+00251 p->has_right_zombie = <span class="keyword">true</span>;
+00252 }
+00253 }
+00254 <span class="keywordflow">if</span>( !my_range.is_divisible() || my_partition.should_execute_range(*<span class="keyword">this</span>) ) {
+00255 (*my_body)( my_range );
+00256 <span class="keywordflow">if</span>( my_context==1 )
+00257 parallel_reduce_store_body(static_cast<finish_type*>(<a class="code" href="a00261.html#a19">parent</a>())->my_body, my_body );
+00258 <span class="keywordflow">return</span> my_partition.continue_after_execute_range(*<span class="keyword">this</span>);
+00259 } <span class="keywordflow">else</span> {
+00260 finish_type& c = *<span class="keyword">new</span>( <a class="code" href="a00261.html#a2">allocate_continuation</a>()) finish_type(my_context);
+00261 <a class="code" href="a00261.html#a8">recycle_as_child_of</a>(c);
+00262 c.<a class="code" href="a00261.html#a13">set_ref_count</a>(2);
+00263 <span class="keywordtype">bool</span> delay = my_partition.decide_whether_to_delay();
+00264 start_reduce_with_affinity& b = *<span class="keyword">new</span>( c.allocate_child() ) start_reduce_with_affinity(*<span class="keyword">this</span>,split());
+00265 my_partition.spawn_or_delay(delay,*<span class="keyword">this</span>,b);
+00266 <span class="keywordflow">return</span> <span class="keyword">this</span>;
+00267 }
+00268 }
+00269
+00271
+00275 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00276"></a><a class="code" href="a00225.html">00276</a> <span class="keyword">class </span><a class="code" href="a00225.html">lambda_reduce_body</a> {
+00277
+00278 <span class="comment">//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced</span>
+00279 <span class="comment">// (might require some performance measurements)</span>
+00280
+00281 <span class="keyword">const</span> Value& identity_element;
+00282 <span class="keyword">const</span> RealBody& my_real_body;
+00283 <span class="keyword">const</span> Reduction& my_reduction;
+00284 Value my_value;
+00285 <span class="keyword">public</span>:
+00286 <a class="code" href="a00225.html">lambda_reduce_body</a>( <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& body, <span class="keyword">const</span> Reduction& reduction )
+00287 : identity_element(identity)
+00288 , my_real_body(body)
+00289 , my_reduction(reduction)
+00290 , my_value(identity)
+00291 { }
+00292 <a class="code" href="a00225.html">lambda_reduce_body</a>( <span class="keyword">const</span> <a class="code" href="a00225.html">lambda_reduce_body</a>& other )
+00293 : identity_element(other.<a class="code" href="a00225.html#r0">identity_element</a>)
+00294 , my_real_body(other.<a class="code" href="a00225.html#r1">my_real_body</a>)
+00295 , my_reduction(other.<a class="code" href="a00225.html#r2">my_reduction</a>)
+00296 , my_value(other.<a class="code" href="a00225.html#r3">my_value</a>)
+00297 { }
+00298 <a class="code" href="a00225.html">lambda_reduce_body</a>( <a class="code" href="a00225.html">lambda_reduce_body</a>& other, <a class="code" href="a00254.html">tbb::split</a> )
+00299 : identity_element(other.<a class="code" href="a00225.html#r0">identity_element</a>)
+00300 , my_real_body(other.<a class="code" href="a00225.html#r1">my_real_body</a>)
+00301 , my_reduction(other.<a class="code" href="a00225.html#r2">my_reduction</a>)
+00302 , my_value(other.<a class="code" href="a00225.html#r0">identity_element</a>)
+00303 { }
+00304 <span class="keywordtype">void</span> operator()(Range& range) {
+00305 my_value = my_real_body(range, const_cast<const Value&>(my_value));
+00306 }
+00307 <span class="keywordtype">void</span> join( <a class="code" href="a00225.html">lambda_reduce_body</a>& rhs ) {
+00308 my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.<a class="code" href="a00225.html#r3">my_value</a>));
+00309 }
+00310 Value result()<span class="keyword"> const </span>{
+00311 <span class="keywordflow">return</span> my_value;
+00312 }
+00313 };
+00314
+00315 } <span class="comment">// namespace internal</span>
+00317 <span class="comment"></span>
+00318 <span class="comment">// Requirements on Range concept are documented in blocked_range.h</span>
+00319
+00338
+00340
+00341 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00342"></a><a class="code" href="a00321.html#ga11">00342</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner = simple_partitioner() ) {
+00343 internal::start_reduce<Range,Body,simple_partitioner>::run( range, body, partitioner );
+00344 }
+00345
+00347
+00348 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00349"></a><a class="code" href="a00321.html#ga12">00349</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
+00350 internal::start_reduce<Range,Body,auto_partitioner>::run( range, body, partitioner );
+00351 }
+00352
+00354
+00355 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00356"></a><a class="code" href="a00321.html#ga13">00356</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, affinity_partitioner& partitioner ) {
+00357 internal::start_reduce_with_affinity<Range,Body>::run( range, body, partitioner );
+00358 }
+00359
+00360 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00361 <span class="preprocessor"></span>
+00362
+00363 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00364"></a><a class="code" href="a00321.html#ga14">00364</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner, task_group_context& context ) {
+00365 internal::start_reduce<Range,Body,simple_partitioner>::run( range, body, partitioner, context );
+00366 }
+00367
+00369
+00370 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00371"></a><a class="code" href="a00321.html#ga15">00371</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner, task_group_context& context ) {
+00372 internal::start_reduce<Range,Body,auto_partitioner>::run( range, body, partitioner, context );
+00373 }
+00374
+00376
+00377 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
+<a name="l00378"></a><a class="code" href="a00321.html#ga16">00378</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, Body& body, affinity_partitioner& partitioner, task_group_context& context ) {
+00379 internal::start_reduce_with_affinity<Range,Body>::run( range, body, partitioner, context );
+00380 }
+00381 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00382
+00386
+00387
+00388 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00389"></a><a class="code" href="a00321.html#ga17">00389</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00390 <span class="keyword">const</span> simple_partitioner& partitioner = simple_partitioner() ) {
+00391 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00392 internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,simple_partitioner>
+00393 ::run(range, body, partitioner );
+00394 <span class="keywordflow">return</span> body.result();
+00395 }
+00396
+00398
+00399 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00400"></a><a class="code" href="a00321.html#ga18">00400</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00401 <span class="keyword">const</span> auto_partitioner& partitioner ) {
+00402 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00403 internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,auto_partitioner>
+00404 ::run( range, body, partitioner );
+00405 <span class="keywordflow">return</span> body.result();
+00406 }
+00407
+00409
+00410 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00411"></a><a class="code" href="a00321.html#ga19">00411</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00412 affinity_partitioner& partitioner ) {
+00413 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00414 internal::start_reduce_with_affinity<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+00415 ::run( range, body, partitioner );
+00416 <span class="keywordflow">return</span> body.result();
+00417 }
+00418
+00419 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00420 <span class="preprocessor"></span>
+00421
+00422 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00423"></a><a class="code" href="a00321.html#ga20">00423</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00424 <span class="keyword">const</span> simple_partitioner& partitioner, task_group_context& context ) {
+00425 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00426 internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,simple_partitioner>
+00427 ::run( range, body, partitioner, context );
+00428 <span class="keywordflow">return</span> body.result();
+00429 }
+00430
+00432
+00433 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00434"></a><a class="code" href="a00321.html#ga21">00434</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00435 <span class="keyword">const</span> auto_partitioner& partitioner, task_group_context& context ) {
+00436 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00437 internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,auto_partitioner>
+00438 ::run( range, body, partitioner, context );
+00439 <span class="keywordflow">return</span> body.result();
+00440 }
+00441
+00443
+00444 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> RealBody, <span class="keyword">typename</span> Reduction>
+<a name="l00445"></a><a class="code" href="a00321.html#ga22">00445</a> Value <a class="code" href="a00321.html#ga11">parallel_reduce</a>( <span class="keyword">const</span> Range& range, <span class="keyword">const</span> Value& identity, <span class="keyword">const</span> RealBody& real_body, <span class="keyword">const</span> Reduction& reduction,
+00446 affinity_partitioner& partitioner, task_group_context& context ) {
+00447 internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+00448 internal::start_reduce_with_affinity<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+00449 ::run( range, body, partitioner, context );
+00450 <span class="keywordflow">return</span> body.result();
+00451 }
+00452 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00453
+00454
+00455 } <span class="comment">// namespace tbb</span>
+00456
+00457 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_reduce_H */</span>
+00458
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00296.html b/doc/html/a00338.html
similarity index 70%
rename from doc/html/a00296.html
rename to doc/html/a00338.html
index 9ffe704..2566668 100644
--- a/doc/html/a00296.html
+++ b/doc/html/a00338.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>parallel_scan.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -36,12 +36,12 @@
00029 <span class="keyword">namespace </span>tbb {
00030
00032
-<a name="l00033"></a><a class="code" href="a00207.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00207.html">pre_scan_tag</a> {
+<a name="l00033"></a><a class="code" href="a00237.html">00033</a> <span class="keyword">struct </span><a class="code" href="a00237.html">pre_scan_tag</a> {
00034 <span class="keyword">static</span> <span class="keywordtype">bool</span> is_final_scan() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
00035 };
00036
00038
-<a name="l00039"></a><a class="code" href="a00190.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00190.html">final_scan_tag</a> {
+<a name="l00039"></a><a class="code" href="a00217.html">00039</a> <span class="keyword">struct </span><a class="code" href="a00217.html">final_scan_tag</a> {
00040 <span class="keyword">static</span> <span class="keywordtype">bool</span> is_final_scan() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
00041 };
00042
@@ -49,19 +49,19 @@
00045
00047
00048 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00049"></a><a class="code" href="a00191.html">00049</a> <span class="keyword">class </span><a class="code" href="a00191.html">final_sum</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
+<a name="l00049"></a><a class="code" href="a00218.html">00049</a> <span class="keyword">class </span><a class="code" href="a00218.html">final_sum</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
00050 <span class="keyword">public</span>:
00051 Body body;
00052 <span class="keyword">private</span>:
-00053 <a class="code" href="a00164.html">aligned_space<Range,1></a> range;
+00053 <a class="code" href="a00190.html">aligned_space<Range,1></a> range;
00055 Body* stuff_last;
00056 <span class="keyword">public</span>:
-00057 <a class="code" href="a00191.html">final_sum</a>( Body& body_ ) :
-00058 body(body_,<a class="code" href="a00221.html">split</a>())
+00057 <a class="code" href="a00218.html">final_sum</a>( Body& body_ ) :
+00058 body(body_,<a class="code" href="a00254.html">split</a>())
00059 {
-00060 poison_pointer(stuff_last);
+00060 <a class="code" href="a00319.html#a77">poison_pointer</a>(stuff_last);
00061 }
-00062 ~<a class="code" href="a00191.html">final_sum</a>() {
+00062 ~<a class="code" href="a00218.html">final_sum</a>() {
00063 range.begin()->~Range();
00064 }
00065 <span class="keywordtype">void</span> finish_construction( <span class="keyword">const</span> Range& range_, Body* stuff_last_ ) {
@@ -69,8 +69,8 @@
00067 stuff_last = stuff_last_;
00068 }
00069 <span class="keyword">private</span>:
-00070 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
-00071 body( *range.begin(), <a class="code" href="a00190.html">final_scan_tag</a>() );
+00070 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
+00071 body( *range.begin(), <a class="code" href="a00217.html">final_scan_tag</a>() );
00072 <span class="keywordflow">if</span>( stuff_last )
00073 stuff_last->assign(body);
00074 <span class="keywordflow">return</span> NULL;
@@ -79,19 +79,19 @@
00077
00079
00080 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00081"></a><a class="code" href="a00227.html">00081</a> <span class="keyword">class </span><a class="code" href="a00227.html">sum_node</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00082 <span class="keyword">typedef</span> <a class="code" href="a00191.html">final_sum<Range,Body></a> <a class="code" href="a00191.html">final_sum_type</a>;
+<a name="l00081"></a><a class="code" href="a00260.html">00081</a> <span class="keyword">class </span><a class="code" href="a00260.html">sum_node</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00082 <span class="keyword">typedef</span> <a class="code" href="a00218.html">final_sum<Range,Body></a> <a class="code" href="a00218.html">final_sum_type</a>;
00083 <span class="keyword">public</span>:
-00084 <a class="code" href="a00191.html">final_sum_type</a> *incoming;
-00085 <a class="code" href="a00191.html">final_sum_type</a> *body;
+00084 <a class="code" href="a00218.html">final_sum_type</a> *incoming;
+00085 <a class="code" href="a00218.html">final_sum_type</a> *body;
00086 Body *stuff_last;
00087 <span class="keyword">private</span>:
-00088 <a class="code" href="a00191.html">final_sum_type</a> *left_sum;
-00089 <a class="code" href="a00227.html">sum_node</a> *left;
-00090 <a class="code" href="a00227.html">sum_node</a> *right;
+00088 <a class="code" href="a00218.html">final_sum_type</a> *left_sum;
+00089 <a class="code" href="a00260.html">sum_node</a> *left;
+00090 <a class="code" href="a00260.html">sum_node</a> *right;
00091 <span class="keywordtype">bool</span> left_is_final;
00092 Range range;
-00093 <a class="code" href="a00227.html">sum_node</a>( <span class="keyword">const</span> Range range_, <span class="keywordtype">bool</span> left_is_final_ ) :
+00093 <a class="code" href="a00260.html">sum_node</a>( <span class="keyword">const</span> Range range_, <span class="keywordtype">bool</span> left_is_final_ ) :
00094 left_sum(NULL),
00095 left(NULL),
00096 right(NULL),
@@ -99,29 +99,29 @@
00098 range(range_)
00099 {
00100 <span class="comment">// Poison fields that will be set by second pass.</span>
-00101 poison_pointer(body);
-00102 poison_pointer(incoming);
+00101 <a class="code" href="a00319.html#a77">poison_pointer</a>(body);
+00102 <a class="code" href="a00319.html#a77">poison_pointer</a>(incoming);
00103 }
-00104 <a class="code" href="a00228.html">task</a>* create_child( <span class="keyword">const</span> Range& range, <a class="code" href="a00191.html">final_sum_type</a>& f, <a class="code" href="a00227.html">sum_node</a>* n, <a class="code" href="a00191.html">final_sum_type</a>* incoming, Body* stuff_last ) {
+00104 <a class="code" href="a00261.html">task</a>* create_child( <span class="keyword">const</span> Range& range, <a class="code" href="a00218.html">final_sum_type</a>& f, <a class="code" href="a00260.html">sum_node</a>* n, <a class="code" href="a00218.html">final_sum_type</a>* incoming, Body* stuff_last ) {
00105 <span class="keywordflow">if</span>( !n ) {
-00106 f.<a class="code" href="a00228.html#a8">recycle_as_child_of</a>( *<span class="keyword">this</span> );
-00107 f.<a class="code" href="a00191.html#a2">finish_construction</a>( range, stuff_last );
+00106 f.<a class="code" href="a00261.html#a8">recycle_as_child_of</a>( *<span class="keyword">this</span> );
+00107 f.<a class="code" href="a00218.html#a2">finish_construction</a>( range, stuff_last );
00108 <span class="keywordflow">return</span> &f;
00109 } <span class="keywordflow">else</span> {
-00110 n-><a class="code" href="a00227.html#o1">body</a> = &f;
-00111 n-><a class="code" href="a00227.html#o0">incoming</a> = incoming;
-00112 n-><a class="code" href="a00227.html#o2">stuff_last</a> = stuff_last;
+00110 n-><a class="code" href="a00260.html#o1">body</a> = &f;
+00111 n-><a class="code" href="a00260.html#o0">incoming</a> = incoming;
+00112 n-><a class="code" href="a00260.html#o2">stuff_last</a> = stuff_last;
00113 <span class="keywordflow">return</span> n;
00114 }
00115 }
-00116 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
+00116 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
00117 <span class="keywordflow">if</span>( body ) {
00118 <span class="keywordflow">if</span>( incoming )
-00119 left_sum-><a class="code" href="a00227.html#o1">body</a>.reverse_join( incoming-><a class="code" href="a00191.html#o0">body</a> );
+00119 left_sum-><a class="code" href="a00260.html#o1">body</a>.reverse_join( incoming-><a class="code" href="a00218.html#o0">body</a> );
00120 recycle_as_continuation();
-00121 <a class="code" href="a00227.html">sum_node</a>& c = *<span class="keyword">this</span>;
-00122 <a class="code" href="a00228.html">task</a>* b = c.<a class="code" href="a00227.html#d1">create_child</a>(Range(range,<a class="code" href="a00221.html">split</a>()),*left_sum,right,left_sum,stuff_last);
-00123 <a class="code" href="a00228.html">task</a>* a = left_is_final ? NULL : c.<a class="code" href="a00227.html#d1">create_child</a>(range,*body,left,incoming,NULL);
+00121 <a class="code" href="a00260.html">sum_node</a>& c = *<span class="keyword">this</span>;
+00122 <a class="code" href="a00261.html">task</a>* b = c.<a class="code" href="a00260.html#d1">create_child</a>(Range(range,<a class="code" href="a00254.html">split</a>()),*left_sum,right,left_sum,stuff_last);
+00123 <a class="code" href="a00261.html">task</a>* a = left_is_final ? NULL : c.<a class="code" href="a00260.html#d1">create_child</a>(range,*body,left,incoming,NULL);
00124 set_ref_count( (a!=NULL)+(b!=NULL) );
00125 body = NULL;
00126 <span class="keywordflow">if</span>( a ) spawn(*b);
@@ -132,24 +132,24 @@
00131 }
00132 }
00133 <span class="keyword">template</span><<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_,<span class="keyword">typename</span> Partitioner_>
-00134 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00225.html">start_scan</a>;
+00134 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00258.html">start_scan</a>;
00135
00136 <span class="keyword">template</span><<span class="keyword">typename</span> Range_,<span class="keyword">typename</span> Body_>
-00137 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00194.html">finish_scan</a>;
+00137 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00221.html">finish_scan</a>;
00138 };
00139
00141
00142 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00143"></a><a class="code" href="a00194.html">00143</a> <span class="keyword">class </span><a class="code" href="a00194.html">finish_scan</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00144 <span class="keyword">typedef</span> <a class="code" href="a00227.html">sum_node<Range,Body></a> <a class="code" href="a00227.html">sum_node_type</a>;
-00145 <span class="keyword">typedef</span> <a class="code" href="a00191.html">final_sum<Range,Body></a> <a class="code" href="a00191.html">final_sum_type</a>;
-00146 <a class="code" href="a00191.html">final_sum_type</a>** <span class="keyword">const</span> sum;
-00147 <a class="code" href="a00227.html">sum_node_type</a>*& return_slot;
+<a name="l00143"></a><a class="code" href="a00221.html">00143</a> <span class="keyword">class </span><a class="code" href="a00221.html">finish_scan</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00144 <span class="keyword">typedef</span> <a class="code" href="a00260.html">sum_node<Range,Body></a> <a class="code" href="a00260.html">sum_node_type</a>;
+00145 <span class="keyword">typedef</span> <a class="code" href="a00218.html">final_sum<Range,Body></a> <a class="code" href="a00218.html">final_sum_type</a>;
+00146 <a class="code" href="a00218.html">final_sum_type</a>** <span class="keyword">const</span> sum;
+00147 <a class="code" href="a00260.html">sum_node_type</a>*& return_slot;
00148 <span class="keyword">public</span>:
-00149 <a class="code" href="a00191.html">final_sum_type</a>* right_zombie;
-00150 <a class="code" href="a00227.html">sum_node_type</a>& result;
+00149 <a class="code" href="a00218.html">final_sum_type</a>* right_zombie;
+00150 <a class="code" href="a00260.html">sum_node_type</a>& result;
00151
-<a name="l00152"></a><a class="code" href="a00194.html#a0">00152</a> <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
+<a name="l00152"></a><a class="code" href="a00221.html#a0">00152</a> <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
00153 __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
00154 <span class="keywordflow">if</span>( result.left )
00155 result.left_is_final = <span class="keyword">false</span>;
@@ -165,7 +165,7 @@
00165 <span class="keywordflow">return</span> NULL;
00166 }
00167
-00168 <a class="code" href="a00194.html">finish_scan</a>( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :
+00168 <a class="code" href="a00221.html">finish_scan</a>( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :
00169 sum(sum_),
00170 return_slot(return_slot_),
00171 right_zombie(NULL),
@@ -177,33 +177,33 @@
00177
00179
00180 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner=simple_partitioner>
-<a name="l00181"></a><a class="code" href="a00225.html">00181</a> <span class="keyword">class </span><a class="code" href="a00225.html">start_scan</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00182 <span class="keyword">typedef</span> <a class="code" href="a00227.html">sum_node<Range,Body></a> <a class="code" href="a00227.html">sum_node_type</a>;
-00183 <span class="keyword">typedef</span> <a class="code" href="a00191.html">final_sum<Range,Body></a> <a class="code" href="a00191.html">final_sum_type</a>;
-00184 <a class="code" href="a00191.html">final_sum_type</a>* body;
-00186 <a class="code" href="a00191.html">final_sum_type</a>** sum;
-00187 <a class="code" href="a00227.html">sum_node_type</a>** return_slot;
-00189 <a class="code" href="a00227.html">sum_node_type</a>* parent_sum;
+<a name="l00181"></a><a class="code" href="a00258.html">00181</a> <span class="keyword">class </span><a class="code" href="a00258.html">start_scan</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00182 <span class="keyword">typedef</span> <a class="code" href="a00260.html">sum_node<Range,Body></a> <a class="code" href="a00260.html">sum_node_type</a>;
+00183 <span class="keyword">typedef</span> <a class="code" href="a00218.html">final_sum<Range,Body></a> <a class="code" href="a00218.html">final_sum_type</a>;
+00184 <a class="code" href="a00218.html">final_sum_type</a>* body;
+00186 <a class="code" href="a00218.html">final_sum_type</a>** sum;
+00187 <a class="code" href="a00260.html">sum_node_type</a>** return_slot;
+00189 <a class="code" href="a00260.html">sum_node_type</a>* parent_sum;
00190 <span class="keywordtype">bool</span> is_final;
00191 <span class="keywordtype">bool</span> is_right_child;
00192 Range range;
00193 <span class="keyword">typename</span> Partitioner::partition_type partition;
-00194 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute();
+00194 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute();
00195 <span class="keyword">public</span>:
-00196 <a class="code" href="a00225.html">start_scan</a>( <a class="code" href="a00227.html">sum_node_type</a>*& return_slot_, <a class="code" href="a00225.html">start_scan</a>& parent, <a class="code" href="a00227.html">sum_node_type</a>* parent_sum_ ) :
-00197 body(parent.<a class="code" href="a00225.html#r0">body</a>),
-00198 sum(parent.<a class="code" href="a00225.html#r1">sum</a>),
+00196 <a class="code" href="a00258.html">start_scan</a>( <a class="code" href="a00260.html">sum_node_type</a>*& return_slot_, <a class="code" href="a00258.html">start_scan</a>& parent, <a class="code" href="a00260.html">sum_node_type</a>* parent_sum_ ) :
+00197 body(parent.<a class="code" href="a00258.html#r0">body</a>),
+00198 sum(parent.<a class="code" href="a00258.html#r1">sum</a>),
00199 return_slot(&return_slot_),
00200 parent_sum(parent_sum_),
-00201 is_final(parent.<a class="code" href="a00225.html#r4">is_final</a>),
+00201 is_final(parent.<a class="code" href="a00258.html#r4">is_final</a>),
00202 is_right_child(<span class="keyword">false</span>),
-00203 range(parent.<a class="code" href="a00225.html#r6">range</a>,<a class="code" href="a00221.html">split</a>()),
-00204 partition(parent.<a class="code" href="a00225.html#r7">partition</a>,<a class="code" href="a00221.html">split</a>())
+00203 range(parent.<a class="code" href="a00258.html#r6">range</a>,<a class="code" href="a00254.html">split</a>()),
+00204 partition(parent.<a class="code" href="a00258.html#r7">partition</a>,<a class="code" href="a00254.html">split</a>())
00205 {
00206 __TBB_ASSERT( !*return_slot, NULL );
00207 }
00208
-00209 <a class="code" href="a00225.html">start_scan</a>( <a class="code" href="a00227.html">sum_node_type</a>*& return_slot_, <span class="keyword">const</span> Range& range_, <a class="code" href="a00191.html">final_sum_type</a>& body_, <span class="keyword">const</span> Partitioner& partitioner_) :
+00209 <a class="code" href="a00258.html">start_scan</a>( <a class="code" href="a00260.html">sum_node_type</a>*& return_slot_, <span class="keyword">const</span> Range& range_, <a class="code" href="a00218.html">final_sum_type</a>& body_, <span class="keyword">const</span> Partitioner& partitioner_) :
00210 body(&body_),
00211 sum(NULL),
00212 return_slot(&return_slot_),
@@ -218,9 +218,9 @@
00221
00222 <span class="keyword">static</span> <span class="keywordtype">void</span> run( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> Partitioner& partitioner ) {
00223 <span class="keywordflow">if</span>( !range.empty() ) {
-00224 <span class="keyword">typedef</span> <a class="code" href="a00225.html">internal::start_scan<Range,Body,Partitioner></a> start_pass1_type;
-00225 <a class="code" href="a00227.html">internal::sum_node<Range,Body></a>* root = NULL;
-00226 <span class="keyword">typedef</span> <a class="code" href="a00191.html">internal::final_sum<Range,Body></a> <a class="code" href="a00191.html">final_sum_type</a>;
+00224 <span class="keyword">typedef</span> <a class="code" href="a00258.html">internal::start_scan<Range,Body,Partitioner></a> start_pass1_type;
+00225 <a class="code" href="a00260.html">internal::sum_node<Range,Body></a>* root = NULL;
+00226 <span class="keyword">typedef</span> <a class="code" href="a00218.html">internal::final_sum<Range,Body></a> <a class="code" href="a00218.html">final_sum_type</a>;
00227 final_sum_type* temp_body = <span class="keyword">new</span>(task::allocate_root()) final_sum_type( body );
00228 start_pass1_type& pass1 = *<span class="keyword">new</span>(task::allocate_root()) start_pass1_type(
00229 <span class="comment">/*return_slot=*/</span>root,
@@ -229,59 +229,59 @@
00232 partitioner );
00233 task::spawn_root_and_wait( pass1 );
00234 <span class="keywordflow">if</span>( root ) {
-00235 root-><a class="code" href="a00227.html#o1">body</a> = temp_body;
-00236 root-><a class="code" href="a00227.html#o0">incoming</a> = NULL;
-00237 root-><a class="code" href="a00227.html#o2">stuff_last</a> = &body;
+00235 root-><a class="code" href="a00260.html#o1">body</a> = temp_body;
+00236 root-><a class="code" href="a00260.html#o0">incoming</a> = NULL;
+00237 root-><a class="code" href="a00260.html#o2">stuff_last</a> = &body;
00238 task::spawn_root_and_wait( *root );
00239 } <span class="keywordflow">else</span> {
-00240 body.assign(temp_body-><a class="code" href="a00191.html#o0">body</a>);
-00241 temp_body-><a class="code" href="a00191.html#a2">finish_construction</a>( range, NULL );
-00242 temp_body-><a class="code" href="a00228.html#a5">destroy</a>(*temp_body);
+00240 body.assign(temp_body-><a class="code" href="a00218.html#o0">body</a>);
+00241 temp_body-><a class="code" href="a00218.html#a2">finish_construction</a>( range, NULL );
+00242 temp_body-><a class="code" href="a00261.html#a5">destroy</a>(*temp_body);
00243 }
00244 }
00245 }
00246 };
00247
00248 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner>
-00249 <a class="code" href="a00228.html">task</a>* <a class="code" href="a00225.html">start_scan<Range,Body,Partitioner>::execute</a>() {
-00250 <span class="keyword">typedef</span> <a class="code" href="a00194.html">internal::finish_scan<Range,Body></a> finish_pass1_type;
-00251 finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( <a class="code" href="a00228.html#a19">parent</a>() ) : NULL;
+00249 <a class="code" href="a00261.html">task</a>* <a class="code" href="a00258.html">start_scan<Range,Body,Partitioner>::execute</a>() {
+00250 <span class="keyword">typedef</span> <a class="code" href="a00221.html">internal::finish_scan<Range,Body></a> finish_pass1_type;
+00251 finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( <a class="code" href="a00261.html#a19">parent</a>() ) : NULL;
00252 <span class="comment">// Inspecting p->result.left_sum would ordinarily be a race condition.</span>
00253 <span class="comment">// But we inspect it only if we are not a stolen task, in which case we</span>
00254 <span class="comment">// know that task assigning to p->result.left_sum has completed.</span>
-00255 <span class="keywordtype">bool</span> treat_as_stolen = is_right_child && (<a class="code" href="a00228.html#a20">is_stolen_task</a>() || body!=p->result.left_sum);
+00255 <span class="keywordtype">bool</span> treat_as_stolen = is_right_child && (<a class="code" href="a00261.html#a20">is_stolen_task</a>() || body!=p->result.left_sum);
00256 <span class="keywordflow">if</span>( treat_as_stolen ) {
00257 <span class="comment">// Invocation is for right child that has been really stolen or needs to be virtually stolen</span>
-00258 p->right_zombie = body = <span class="keyword">new</span>( <a class="code" href="a00228.html#e0">allocate_root</a>() ) final_sum_type(body-><a class="code" href="a00191.html#o0">body</a>);
+00258 p->right_zombie = body = <span class="keyword">new</span>( <a class="code" href="a00261.html#e0">allocate_root</a>() ) final_sum_type(body-><a class="code" href="a00218.html#o0">body</a>);
00259 is_final = <span class="keyword">false</span>;
00260 }
-00261 <a class="code" href="a00228.html">task</a>* next_task = NULL;
+00261 <a class="code" href="a00261.html">task</a>* next_task = NULL;
00262 <span class="keywordflow">if</span>( (is_right_child && !treat_as_stolen) || !range.is_divisible() || partition.should_execute_range(*<span class="keyword">this</span>) ) {
00263 <span class="keywordflow">if</span>( is_final )
-00264 (body-><a class="code" href="a00191.html#o0">body</a>)( range, <a class="code" href="a00190.html">final_scan_tag</a>() );
+00264 (body-><a class="code" href="a00218.html#o0">body</a>)( range, <a class="code" href="a00217.html">final_scan_tag</a>() );
00265 <span class="keywordflow">else</span> <span class="keywordflow">if</span>( sum )
-00266 (body-><a class="code" href="a00191.html#o0">body</a>)( range, <a class="code" href="a00207.html">pre_scan_tag</a>() );
+00266 (body-><a class="code" href="a00218.html#o0">body</a>)( range, <a class="code" href="a00237.html">pre_scan_tag</a>() );
00267 <span class="keywordflow">if</span>( sum )
00268 *sum = body;
00269 __TBB_ASSERT( !*return_slot, NULL );
00270 } <span class="keywordflow">else</span> {
00271 sum_node_type* result;
00272 <span class="keywordflow">if</span>( parent_sum )
-00273 result = <span class="keyword">new</span>(<a class="code" href="a00228.html#a4">allocate_additional_child_of</a>(*parent_sum)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
+00273 result = <span class="keyword">new</span>(<a class="code" href="a00261.html#a4">allocate_additional_child_of</a>(*parent_sum)) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
00274 <span class="keywordflow">else</span>
00275 result = <span class="keyword">new</span>(task::allocate_root()) sum_node_type(range,<span class="comment">/*left_is_final=*/</span>is_final);
-00276 finish_pass1_type& c = *<span class="keyword">new</span>( <a class="code" href="a00228.html#a2">allocate_continuation</a>()) finish_pass1_type(*return_slot,sum,*result);
+00276 finish_pass1_type& c = *<span class="keyword">new</span>( <a class="code" href="a00261.html#a2">allocate_continuation</a>()) finish_pass1_type(*return_slot,sum,*result);
00277 <span class="comment">// Split off right child</span>
00278 start_scan& b = *<span class="keyword">new</span>( c.allocate_child() ) start_scan( <span class="comment">/*return_slot=*/</span>result->right, *<span class="keyword">this</span>, result );
00279 b.is_right_child = <span class="keyword">true</span>;
00280 <span class="comment">// Left child is recycling of *this. Must recycle this before spawning b, </span>
00281 <span class="comment">// otherwise b might complete and decrement c.ref_count() to zero, which</span>
00282 <span class="comment">// would cause c.execute() to run prematurely.</span>
-00283 <a class="code" href="a00228.html#a8">recycle_as_child_of</a>(c);
-00284 c.<a class="code" href="a00228.html#a13">set_ref_count</a>(2);
-00285 c.<a class="code" href="a00228.html#a14">spawn</a>(b);
+00283 <a class="code" href="a00261.html#a8">recycle_as_child_of</a>(c);
+00284 c.<a class="code" href="a00261.html#a13">set_ref_count</a>(2);
+00285 c.<a class="code" href="a00261.html#a14">spawn</a>(b);
00286 sum = &result->left_sum;
-00287 return_slot = &result-><a class="code" href="a00227.html#r1">left</a>;
+00287 return_slot = &result-><a class="code" href="a00260.html#r1">left</a>;
00288 is_right_child = <span class="keyword">false</span>;
00289 next_task = <span class="keyword">this</span>;
00290 parent_sum = result;
@@ -296,13 +296,13 @@
00317
00319
00320 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00321"></a><a class="code" href="a00281.html#ga10">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga10">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner=simple_partitioner() ) {
+<a name="l00321"></a><a class="code" href="a00321.html#ga23">00321</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga23">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> simple_partitioner& partitioner=simple_partitioner() ) {
00322 internal::start_scan<Range,Body,simple_partitioner>::run(range,body,partitioner);
00323 }
00324
00326
00327 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body>
-<a name="l00328"></a><a class="code" href="a00281.html#ga11">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00281.html#ga10">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
+<a name="l00328"></a><a class="code" href="a00321.html#ga24">00328</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga23">parallel_scan</a>( <span class="keyword">const</span> Range& range, Body& body, <span class="keyword">const</span> auto_partitioner& partitioner ) {
00329 internal::start_scan<Range,Body,auto_partitioner>::run(range,body,partitioner);
00330 }
00332
@@ -312,7 +312,7 @@
00336
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00339.html b/doc/html/a00339.html
new file mode 100644
index 0000000..01c3a61
--- /dev/null
+++ b/doc/html/a00339.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>parallel_sort.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>parallel_sort.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_parallel_sort_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_parallel_sort_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "parallel_for.h"</span>
+00025 <span class="preprocessor">#include "blocked_range.h"</span>
+00026 <span class="preprocessor">#include <algorithm></span>
+00027 <span class="preprocessor">#include <iterator></span>
+00028 <span class="preprocessor">#include <functional></span>
+00029
+00030 <span class="keyword">namespace </span>tbb {
+00031
+00033 <span class="keyword">namespace </span>internal {
+00034
+00036
+00039 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00040"></a><a class="code" href="a00244.html">00040</a> <span class="keyword">class </span><a class="code" href="a00244.html">quick_sort_range</a>: <span class="keyword">private</span> <a class="code" href="a00229.html">no_assign</a> {
+00041
+00042 <span class="keyword">inline</span> size_t median_of_three(<span class="keyword">const</span> RandomAccessIterator &array, size_t l, size_t m, size_t r)<span class="keyword"> const </span>{
+00043 <span class="keywordflow">return</span> comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )
+00044 : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
+00045 }
+00046
+00047 <span class="keyword">inline</span> size_t pseudo_median_of_nine( <span class="keyword">const</span> RandomAccessIterator &array, <span class="keyword">const</span> <a class="code" href="a00244.html">quick_sort_range</a> &range )<span class="keyword"> const </span>{
+00048 size_t offset = range.<a class="code" href="a00244.html#o2">size</a>/8u;
+00049 <span class="keywordflow">return</span> median_of_three(array,
+00050 median_of_three(array, 0, offset, offset*2),
+00051 median_of_three(array, offset*3, offset*4, offset*5),
+00052 median_of_three(array, offset*6, offset*7, range.<a class="code" href="a00244.html#o2">size</a> - 1) );
+00053
+00054 }
+00055
+00056 <span class="keyword">public</span>:
+00057
+00058 <span class="keyword">static</span> <span class="keyword">const</span> size_t grainsize = 500;
+00059 <span class="keyword">const</span> Compare ∁
+00060 RandomAccessIterator begin;
+00061 size_t size;
+00062
+00063 <a class="code" href="a00244.html">quick_sort_range</a>( RandomAccessIterator begin_, size_t size_, <span class="keyword">const</span> Compare &comp_ ) :
+00064 comp(comp_), begin(begin_), size(size_) {}
+00065
+00066 <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size==0;}
+00067 <span class="keywordtype">bool</span> is_divisible()<span class="keyword"> const </span>{<span class="keywordflow">return</span> size>=grainsize;}
+00068
+00069 <a class="code" href="a00244.html">quick_sort_range</a>( <a class="code" href="a00244.html">quick_sort_range</a>& range, <a class="code" href="a00254.html">split</a> ) : comp(range.<a class="code" href="a00244.html#o0">comp</a>) {
+00070 RandomAccessIterator array = range.<a class="code" href="a00244.html#o1">begin</a>;
+00071 RandomAccessIterator key0 = range.<a class="code" href="a00244.html#o1">begin</a>;
+00072 size_t m = pseudo_median_of_nine(array, range);
+00073 <span class="keywordflow">if</span> (m) std::swap ( array[0], array[m] );
+00074
+00075 size_t i=0;
+00076 size_t j=range.<a class="code" href="a00244.html#o2">size</a>;
+00077 <span class="comment">// Partition interval [i+1,j-1] with key *key0.</span>
+00078 <span class="keywordflow">for</span>(;;) {
+00079 __TBB_ASSERT( i<j, NULL );
+00080 <span class="comment">// Loop must terminate since array[l]==*key0.</span>
+00081 <span class="keywordflow">do</span> {
+00082 --j;
+00083 __TBB_ASSERT( i<=j, <span class="stringliteral">"bad ordering relation?"</span> );
+00084 } <span class="keywordflow">while</span>( comp( *key0, array[j] ));
+00085 <span class="keywordflow">do</span> {
+00086 __TBB_ASSERT( i<=j, NULL );
+00087 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+00088 ++i;
+00089 } <span class="keywordflow">while</span>( comp( array[i],*key0 ));
+00090 <span class="keywordflow">if</span>( i==j ) <span class="keywordflow">goto</span> partition;
+00091 std::swap( array[i], array[j] );
+00092 }
+00093 partition:
+00094 <span class="comment">// Put the partition key were it belongs</span>
+00095 std::swap( array[j], *key0 );
+00096 <span class="comment">// array[l..j) is less or equal to key.</span>
+00097 <span class="comment">// array(j..r) is greater or equal to key.</span>
+00098 <span class="comment">// array[j] is equal to key</span>
+00099 i=j+1;
+00100 begin = array+i;
+00101 size = range.<a class="code" href="a00244.html#o2">size</a>-i;
+00102 range.<a class="code" href="a00244.html#o2">size</a> = j;
+00103 }
+00104 };
+00105
+00107
+00108 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00109"></a><a class="code" href="a00243.html">00109</a> <span class="keyword">class </span><a class="code" href="a00243.html">quick_sort_pretest_body</a> : internal::<a class="code" href="a00229.html">no_assign</a> {
+00110 <span class="keyword">const</span> Compare ∁
+00111
+00112 <span class="keyword">public</span>:
+00113 <a class="code" href="a00243.html">quick_sort_pretest_body</a>(<span class="keyword">const</span> Compare &_comp) : comp(_comp) {}
+00114
+00115 <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> <a class="code" href="a00195.html">blocked_range<RandomAccessIterator></a>& range )<span class="keyword"> const </span>{
+00116 <a class="code" href="a00261.html">task</a> &my_task = task::self();
+00117 RandomAccessIterator my_end = range.<a class="code" href="a00195.html#a3">end</a>();
+00118
+00119 <span class="keywordtype">int</span> i = 0;
+00120 <span class="keywordflow">for</span> (RandomAccessIterator k = range.<a class="code" href="a00195.html#a2">begin</a>(); k != my_end; ++k, ++i) {
+00121 <span class="keywordflow">if</span> ( i%64 == 0 && my_task.<a class="code" href="a00261.html#a28">is_cancelled</a>() ) <span class="keywordflow">break</span>;
+00122
+00123 <span class="comment">// The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1</span>
+00124 <span class="keywordflow">if</span> ( comp( *(k), *(k-1) ) ) {
+00125 my_task.<a class="code" href="a00261.html#a27">cancel_group_execution</a>();
+00126 <span class="keywordflow">break</span>;
+00127 }
+00128 }
+00129 }
+00130
+00131 };
+00132
+00134
+00135 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00136"></a><a class="code" href="a00242.html">00136</a> <span class="keyword">struct </span><a class="code" href="a00242.html">quick_sort_body</a> {
+00137 <span class="keywordtype">void</span> operator()( <span class="keyword">const</span> <a class="code" href="a00244.html">quick_sort_range<RandomAccessIterator,Compare></a>& range )<span class="keyword"> const </span>{
+00138 <span class="comment">//SerialQuickSort( range.begin, range.size, range.comp );</span>
+00139 std::sort( range.<a class="code" href="a00244.html#o1">begin</a>, range.<a class="code" href="a00244.html#o1">begin</a> + range.<a class="code" href="a00244.html#o2">size</a>, range.<a class="code" href="a00244.html#o0">comp</a> );
+00140 }
+00141 };
+00142
+00144
+00145 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00146"></a><a class="code" href="a00321.html#ga25">00146</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga25">parallel_quick_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp ) {
+00147 task_group_context my_context;
+00148 <span class="keyword">const</span> <span class="keywordtype">int</span> serial_cutoff = 9;
+00149
+00150 __TBB_ASSERT( begin + serial_cutoff < end, <span class="stringliteral">"min_parallel_size is smaller than serial cutoff?"</span> );
+00151 RandomAccessIterator k;
+00152 <span class="keywordflow">for</span> ( k = begin ; k != begin + serial_cutoff; ++k ) {
+00153 <span class="keywordflow">if</span> ( comp( *(k+1), *k ) ) {
+00154 <span class="keywordflow">goto</span> do_parallel_quick_sort;
+00155 }
+00156 }
+00157
+00158 <a class="code" href="a00321.html#ga10">parallel_for</a>( blocked_range<RandomAccessIterator>(k+1, end),
+00159 quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+00160 auto_partitioner(),
+00161 my_context);
+00162
+00163 <span class="keywordflow">if</span> (my_context.is_group_execution_cancelled())
+00164 do_parallel_quick_sort:
+00165 <a class="code" href="a00321.html#ga10">parallel_for</a>( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),
+00166 quick_sort_body<RandomAccessIterator,Compare>(),
+00167 auto_partitioner() );
+00168 }
+00169
+00170 } <span class="comment">// namespace internal</span>
+00172 <span class="comment"></span>
+00183
+00185
+00188 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator, <span class="keyword">typename</span> Compare>
+<a name="l00189"></a><a class="code" href="a00321.html#ga26">00189</a> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga28">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end, <span class="keyword">const</span> Compare& comp) {
+00190 <span class="keyword">const</span> <span class="keywordtype">int</span> min_parallel_size = 500;
+00191 <span class="keywordflow">if</span>( end > begin ) {
+00192 <span class="keywordflow">if</span> (end - begin < min_parallel_size) {
+00193 std::sort(begin, end, comp);
+00194 } <span class="keywordflow">else</span> {
+00195 <a class="code" href="a00321.html#ga25">internal::parallel_quick_sort</a>(begin, end, comp);
+00196 }
+00197 }
+00198 }
+00199
+00201
+00202 <span class="keyword">template</span><<span class="keyword">typename</span> RandomAccessIterator>
+<a name="l00203"></a><a class="code" href="a00321.html#ga27">00203</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga28">parallel_sort</a>( RandomAccessIterator begin, RandomAccessIterator end ) {
+00204 <a class="code" href="a00321.html#ga28">parallel_sort</a>( begin, end, std::less< <span class="keyword">typename</span> std::iterator_traits<RandomAccessIterator>::value_type >() );
+00205 }
+00206
+00208
+00209 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00210"></a><a class="code" href="a00321.html#ga28">00210</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00321.html#ga28">parallel_sort</a>( T * begin, T * end ) {
+00211 <a class="code" href="a00321.html#ga28">parallel_sort</a>( begin, end, std::less< T >() );
+00212 }
+00214
+00215
+00216 } <span class="comment">// namespace tbb</span>
+00217
+00218 <span class="preprocessor">#endif</span>
+00219 <span class="preprocessor"></span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00298.html b/doc/html/a00340.html
similarity index 77%
rename from doc/html/a00298.html
rename to doc/html/a00340.html
index 0dfc34d..1014f5f 100644
--- a/doc/html/a00298.html
+++ b/doc/html/a00340.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>parallel_while.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -42,55 +42,55 @@
00036
00038
00040 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00041"></a><a class="code" href="a00241.html">00041</a> <span class="keyword">class </span><a class="code" href="a00241.html">while_iteration_task</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
+<a name="l00041"></a><a class="code" href="a00277.html">00041</a> <span class="keyword">class </span><a class="code" href="a00277.html">while_iteration_task</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
00042 <span class="keyword">const</span> Body& my_body;
00043 <span class="keyword">typename</span> Body::argument_type my_value;
-00044 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
+00044 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
00045 my_body(my_value);
00046 <span class="keywordflow">return</span> NULL;
00047 }
-00048 <a class="code" href="a00241.html">while_iteration_task</a>( <span class="keyword">const</span> <span class="keyword">typename</span> Body::argument_type& value, <span class="keyword">const</span> Body& body ) :
+00048 <a class="code" href="a00277.html">while_iteration_task</a>( <span class="keyword">const</span> <span class="keyword">typename</span> Body::argument_type& value, <span class="keyword">const</span> Body& body ) :
00049 my_body(body), my_value(value)
00050 {}
-00051 <span class="keyword">template</span><<span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00240.html">while_group_task</a>;
-00052 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00204.html">tbb::parallel_while</a><Body>;
+00051 <span class="keyword">template</span><<span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00276.html">while_group_task</a>;
+00052 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00234.html">tbb::parallel_while</a><Body>;
00053 };
00054
00056
00058 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00059"></a><a class="code" href="a00240.html">00059</a> <span class="keyword">class </span><a class="code" href="a00240.html">while_group_task</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
+<a name="l00059"></a><a class="code" href="a00276.html">00059</a> <span class="keyword">class </span><a class="code" href="a00276.html">while_group_task</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
00060 <span class="keyword">static</span> <span class="keyword">const</span> size_t max_arg_size = 4;
00061 <span class="keyword">const</span> Body& my_body;
00062 size_t size;
00063 <span class="keyword">typename</span> Body::argument_type my_arg[max_arg_size];
-00064 <a class="code" href="a00240.html">while_group_task</a>( <span class="keyword">const</span> Body& body ) : my_body(body), size(0) {}
-00065 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
-00066 <span class="keyword">typedef</span> <a class="code" href="a00241.html">while_iteration_task<Body></a> iteration_type;
+00064 <a class="code" href="a00276.html">while_group_task</a>( <span class="keyword">const</span> Body& body ) : my_body(body), size(0) {}
+00065 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
+00066 <span class="keyword">typedef</span> <a class="code" href="a00277.html">while_iteration_task<Body></a> iteration_type;
00067 __TBB_ASSERT( size>0, NULL );
-00068 <a class="code" href="a00229.html">task_list</a> list;
-00069 <a class="code" href="a00228.html">task</a>* t;
+00068 <a class="code" href="a00263.html">task_list</a> list;
+00069 <a class="code" href="a00261.html">task</a>* t;
00070 size_t k=0;
00071 <span class="keywordflow">for</span>(;;) {
00072 t = <span class="keyword">new</span>( allocate_child() ) iteration_type(my_arg[k],my_body);
00073 <span class="keywordflow">if</span>( ++k==size ) <span class="keywordflow">break</span>;
-00074 list.<a class="code" href="a00229.html#a3">push_back</a>(*t);
+00074 list.<a class="code" href="a00263.html#a3">push_back</a>(*t);
00075 }
00076 set_ref_count(<span class="keywordtype">int</span>(k+1));
00077 spawn(list);
00078 spawn_and_wait_for_all(*t);
00079 <span class="keywordflow">return</span> NULL;
00080 }
-00081 <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00242.html">while_task</a>;
+00081 <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body_> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00278.html">while_task</a>;
00082 };
00083
00085
00087 <span class="keyword">template</span><<span class="keyword">typename</span> Stream, <span class="keyword">typename</span> Body>
-<a name="l00088"></a><a class="code" href="a00242.html">00088</a> <span class="keyword">class </span><a class="code" href="a00242.html">while_task</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
+<a name="l00088"></a><a class="code" href="a00278.html">00088</a> <span class="keyword">class </span><a class="code" href="a00278.html">while_task</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
00089 Stream& my_stream;
00090 <span class="keyword">const</span> Body& my_body;
-00091 <a class="code" href="a00188.html">empty_task</a>& my_barrier;
-00092 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
-00093 <span class="keyword">typedef</span> <a class="code" href="a00240.html">while_group_task<Body></a> block_type;
+00091 <a class="code" href="a00215.html">empty_task</a>& my_barrier;
+00092 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
+00093 <span class="keyword">typedef</span> <a class="code" href="a00276.html">while_group_task<Body></a> block_type;
00094 block_type& t = *<span class="keyword">new</span>( allocate_additional_child_of(my_barrier) ) block_type(my_body);
00095 size_t k=0;
00096 <span class="keywordflow">while</span>( my_stream.pop_if_present(t.my_arg[k]) ) {
@@ -104,34 +104,34 @@
00104 destroy(t);
00105 <span class="keywordflow">return</span> NULL;
00106 } <span class="keywordflow">else</span> {
-00107 t.<a class="code" href="a00240.html#r1">size</a> = k;
+00107 t.<a class="code" href="a00276.html#r1">size</a> = k;
00108 <span class="keywordflow">return</span> &t;
00109 }
00110 }
-00111 <a class="code" href="a00242.html">while_task</a>( Stream& stream, <span class="keyword">const</span> Body& body, <a class="code" href="a00188.html">empty_task</a>& barrier ) :
+00111 <a class="code" href="a00278.html">while_task</a>( Stream& stream, <span class="keyword">const</span> Body& body, <a class="code" href="a00215.html">empty_task</a>& barrier ) :
00112 my_stream(stream),
00113 my_body(body),
00114 my_barrier(barrier)
00115 {}
-00116 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00204.html">tbb::parallel_while</a><Body>;
+00116 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00234.html">tbb::parallel_while</a><Body>;
00117 };
00118
00119 } <span class="comment">// namespace internal</span>
00121 <span class="comment"></span>
00123
00128 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00129"></a><a class="code" href="a00204.html">00129</a> <span class="keyword">class </span><a class="code" href="a00204.html">parallel_while</a>: internal::no_copy {
+<a name="l00129"></a><a class="code" href="a00234.html">00129</a> <span class="keyword">class </span><a class="code" href="a00234.html">parallel_while</a>: internal::no_copy {
00130 <span class="keyword">public</span>:
-<a name="l00132"></a><a class="code" href="a00204.html#a0">00132</a> <a class="code" href="a00204.html">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
+<a name="l00132"></a><a class="code" href="a00234.html#a0">00132</a> <a class="code" href="a00234.html">parallel_while</a>() : my_body(NULL), my_barrier(NULL) {}
00133
-<a name="l00135"></a><a class="code" href="a00204.html#a1">00135</a> ~<a class="code" href="a00204.html">parallel_while</a>() {
+<a name="l00135"></a><a class="code" href="a00234.html#a1">00135</a> ~<a class="code" href="a00234.html">parallel_while</a>() {
00136 <span class="keywordflow">if</span>( my_barrier ) {
00137 my_barrier->destroy(*my_barrier);
00138 my_barrier = NULL;
00139 }
00140 }
00141
-<a name="l00143"></a><a class="code" href="a00204.html#w0">00143</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type value_type;
+<a name="l00143"></a><a class="code" href="a00234.html#w0">00143</a> <span class="keyword">typedef</span> <span class="keyword">typename</span> Body::argument_type value_type;
00144
00146
00149 <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
@@ -142,30 +142,30 @@
00155
00156 <span class="keyword">private</span>:
00157 <span class="keyword">const</span> Body* my_body;
-00158 <a class="code" href="a00188.html">empty_task</a>* my_barrier;
+00158 <a class="code" href="a00215.html">empty_task</a>* my_barrier;
00159 };
00160
00161 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
00162 <span class="keyword">template</span><<span class="keyword">typename</span> Stream>
-<a name="l00163"></a><a class="code" href="a00204.html#a2">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00204.html">parallel_while<Body>::run</a>( Stream& stream, <span class="keyword">const</span> Body& body ) {
+<a name="l00163"></a><a class="code" href="a00234.html#a2">00163</a> <span class="keywordtype">void</span> <a class="code" href="a00234.html">parallel_while<Body>::run</a>( Stream& stream, <span class="keyword">const</span> Body& body ) {
00164 <span class="keyword">using</span> <span class="keyword">namespace </span>internal;
-00165 <a class="code" href="a00188.html">empty_task</a>& barrier = *<span class="keyword">new</span>( task::allocate_root() ) <a class="code" href="a00188.html">empty_task</a>();
+00165 <a class="code" href="a00215.html">empty_task</a>& barrier = *<span class="keyword">new</span>( task::allocate_root() ) <a class="code" href="a00215.html">empty_task</a>();
00166 my_body = &body;
00167 my_barrier = &barrier;
-00168 my_barrier-><a class="code" href="a00228.html#a13">set_ref_count</a>(2);
-00169 while_task<Stream,Body>& w = *<span class="keyword">new</span>( my_barrier-><a class="code" href="a00228.html#a3">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
-00170 my_barrier-><a class="code" href="a00228.html#a16">spawn_and_wait_for_all</a>(w);
-00171 my_barrier-><a class="code" href="a00228.html#a5">destroy</a>(*my_barrier);
+00168 my_barrier-><a class="code" href="a00261.html#a13">set_ref_count</a>(2);
+00169 while_task<Stream,Body>& w = *<span class="keyword">new</span>( my_barrier-><a class="code" href="a00261.html#a3">allocate_child</a>() ) while_task<Stream,Body>( stream, body, barrier );
+00170 my_barrier-><a class="code" href="a00261.html#a16">spawn_and_wait_for_all</a>(w);
+00171 my_barrier-><a class="code" href="a00261.html#a5">destroy</a>(*my_barrier);
00172 my_barrier = NULL;
00173 my_body = NULL;
00174 }
00175
00176 <span class="keyword">template</span><<span class="keyword">typename</span> Body>
-<a name="l00177"></a><a class="code" href="a00204.html#a3">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00204.html">parallel_while<Body>::add</a>( <span class="keyword">const</span> value_type& item ) {
+<a name="l00177"></a><a class="code" href="a00234.html#a3">00177</a> <span class="keywordtype">void</span> <a class="code" href="a00234.html">parallel_while<Body>::add</a>( <span class="keyword">const</span> value_type& item ) {
00178 __TBB_ASSERT(my_barrier,<span class="stringliteral">"attempt to add to parallel_while that is not running"</span>);
-00179 <span class="keyword">typedef</span> <a class="code" href="a00241.html">internal::while_iteration_task<Body></a> iteration_type;
+00179 <span class="keyword">typedef</span> <a class="code" href="a00277.html">internal::while_iteration_task<Body></a> iteration_type;
00180 iteration_type& i = *<span class="keyword">new</span>( task::self().allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
-00181 task::self().<a class="code" href="a00228.html#a14">spawn</a>( i );
+00181 task::self().<a class="code" href="a00261.html#a14">spawn</a>( i );
00182 }
00183
00184 } <span class="comment">// namespace </span>
@@ -173,7 +173,7 @@
00186 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_parallel_while */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00299.html b/doc/html/a00341.html
similarity index 75%
rename from doc/html/a00299.html
rename to doc/html/a00341.html
index fc04e7a..fb3bc90 100644
--- a/doc/html/a00299.html
+++ b/doc/html/a00341.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>partitioner.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -34,92 +34,92 @@
00027 <span class="keyword">class </span>affinity_partitioner;
00028
00030 <span class="keyword">namespace </span>internal {
-00031 size_t get_initial_auto_partitioner_divisor();
+00031 size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
00032
00034
-<a name="l00035"></a><a class="code" href="a00163.html">00035</a> <span class="keyword">class </span><a class="code" href="a00163.html">affinity_partitioner_base_v3</a>: <a class="code" href="a00200.html">no_copy</a> {
-00036 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00162.html">tbb::affinity_partitioner</a>;
+<a name="l00035"></a><a class="code" href="a00189.html">00035</a> <span class="keyword">class </span><a class="code" href="a00189.html">affinity_partitioner_base_v3</a>: <a class="code" href="a00230.html">no_copy</a> {
+00036 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00188.html">tbb::affinity_partitioner</a>;
00038
-00039 <a class="code" href="a00279.html#a12">affinity_id</a>* my_array;
+00039 <a class="code" href="a00319.html#a11">affinity_id</a>* my_array;
00041 size_t my_size;
-00043 <a class="code" href="a00163.html">affinity_partitioner_base_v3</a>() : my_array(NULL), my_size(0) {}
-00045 ~<a class="code" href="a00163.html">affinity_partitioner_base_v3</a>() {resize(0);}
+00043 <a class="code" href="a00189.html">affinity_partitioner_base_v3</a>() : my_array(NULL), my_size(0) {}
+00045 ~<a class="code" href="a00189.html">affinity_partitioner_base_v3</a>() {resize(0);}
00047
-00048 <span class="keywordtype">void</span> resize( <span class="keywordtype">unsigned</span> factor );
+00048 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD resize( <span class="keywordtype">unsigned</span> factor );
00049 <span class="keyword">friend</span> <span class="keyword">class </span>affinity_partition_type;
00050 };
00051
-<a name="l00053"></a><a class="code" href="a00205.html">00053</a> <span class="keyword">class </span><a class="code" href="a00205.html">partition_type_base</a> {
+<a name="l00053"></a><a class="code" href="a00235.html">00053</a> <span class="keyword">class </span><a class="code" href="a00235.html">partition_type_base</a> {
00054 <span class="keyword">public</span>:
-00055 <span class="keywordtype">void</span> set_affinity( <a class="code" href="a00228.html">task</a> &t ) {}
-00056 <span class="keywordtype">void</span> note_affinity( task::affinity_id <span class="keywordtype">id</span> ) {}
-00057 <a class="code" href="a00228.html">task</a>* continue_after_execute_range( <a class="code" href="a00228.html">task</a>& t ) {<span class="keywordflow">return</span> NULL;}
+00055 <span class="keywordtype">void</span> set_affinity( <a class="code" href="a00261.html">task</a> & ) {}
+00056 <span class="keywordtype">void</span> note_affinity( task::affinity_id ) {}
+00057 <a class="code" href="a00261.html">task</a>* continue_after_execute_range( <a class="code" href="a00261.html">task</a>& ) {<span class="keywordflow">return</span> NULL;}
00058 <span class="keywordtype">bool</span> decide_whether_to_delay() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-00059 <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, <a class="code" href="a00228.html">task</a>& a, <a class="code" href="a00228.html">task</a>& b ) {
-00060 a.<a class="code" href="a00228.html#a14">spawn</a>(b);
+00059 <span class="keywordtype">void</span> spawn_or_delay( <span class="keywordtype">bool</span>, <a class="code" href="a00261.html">task</a>& a, <a class="code" href="a00261.html">task</a>& b ) {
+00060 a.<a class="code" href="a00261.html#a14">spawn</a>(b);
00061 }
00062 };
00063
00064 <span class="keyword">class </span>affinity_partition_type;
00065
-00066 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00222.html">start_for</a>;
-00067 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00223.html">start_reduce</a>;
-00068 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">class </span><a class="code" href="a00224.html">start_reduce_with_affinity</a>;
-00069 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00225.html">start_scan</a>;
+00066 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00255.html">start_for</a>;
+00067 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00256.html">start_reduce</a>;
+00068 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">class </span><a class="code" href="a00257.html">start_reduce_with_affinity</a>;
+00069 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">class </span><a class="code" href="a00258.html">start_scan</a>;
00070
00071 } <span class="comment">// namespace internal</span>
00073 <span class="comment"></span>
00075
-<a name="l00077"></a><a class="code" href="a00216.html">00077</a> <span class="keyword">class </span><a class="code" href="a00216.html">simple_partitioner</a> {
+<a name="l00077"></a><a class="code" href="a00249.html">00077</a> <span class="keyword">class </span><a class="code" href="a00249.html">simple_partitioner</a> {
00078 <span class="keyword">public</span>:
-00079 <a class="code" href="a00216.html">simple_partitioner</a>() {}
+00079 <a class="code" href="a00249.html">simple_partitioner</a>() {}
00080 <span class="keyword">private</span>:
-00081 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00222.html">internal::start_for</a>;
-00082 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00223.html">internal::start_reduce</a>;
-00083 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00225.html">internal::start_scan</a>;
+00081 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00255.html">internal::start_for</a>;
+00082 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00256.html">internal::start_reduce</a>;
+00083 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00258.html">internal::start_scan</a>;
00084
00085 <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
00086 <span class="keyword">public</span>:
-00087 <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00228.html">task</a> &t) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-00088 partition_type( <span class="keyword">const</span> <a class="code" href="a00216.html">simple_partitioner</a>& sp ) {}
-00089 partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00221.html">split</a> ) {}
+00087 <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00261.html">task</a>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+00088 partition_type( <span class="keyword">const</span> <a class="code" href="a00249.html">simple_partitioner</a>& ) {}
+00089 partition_type( <span class="keyword">const</span> partition_type&, <a class="code" href="a00254.html">split</a> ) {}
00090 };
00091 };
00092
00094
-<a name="l00097"></a><a class="code" href="a00167.html">00097</a> <span class="keyword">class </span><a class="code" href="a00167.html">auto_partitioner</a> {
+<a name="l00097"></a><a class="code" href="a00193.html">00097</a> <span class="keyword">class </span><a class="code" href="a00193.html">auto_partitioner</a> {
00098 <span class="keyword">public</span>:
-00099 <a class="code" href="a00167.html">auto_partitioner</a>() {}
+00099 <a class="code" href="a00193.html">auto_partitioner</a>() {}
00100
00101 <span class="keyword">private</span>:
-00102 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00222.html">internal::start_for</a>;
-00103 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00223.html">internal::start_reduce</a>;
-00104 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00225.html">internal::start_scan</a>;
+00102 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00255.html">internal::start_for</a>;
+00103 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00256.html">internal::start_reduce</a>;
+00104 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00258.html">internal::start_scan</a>;
00105
00106 <span class="keyword">class </span>partition_type: <span class="keyword">public</span> internal::partition_type_base {
00107 size_t num_chunks;
00108 <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
00109 <span class="keyword">public</span>:
-00110 <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00228.html">task</a> &t) {
-00111 <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00228.html#a20">is_stolen_task</a>() )
+00110 <span class="keywordtype">bool</span> should_execute_range(<span class="keyword">const</span> <a class="code" href="a00261.html">task</a> &t) {
+00111 <span class="keywordflow">if</span>( num_chunks<VICTIM_CHUNKS && t.<a class="code" href="a00261.html#a20">is_stolen_task</a>() )
00112 num_chunks = VICTIM_CHUNKS;
00113 <span class="keywordflow">return</span> num_chunks==1;
00114 }
-00115 partition_type( <span class="keyword">const</span> <a class="code" href="a00167.html">auto_partitioner</a>& ap ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
-00116 partition_type( partition_type& pt, <a class="code" href="a00221.html">split</a> ) {
+00115 partition_type( <span class="keyword">const</span> <a class="code" href="a00193.html">auto_partitioner</a>& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+00116 partition_type( partition_type& pt, <a class="code" href="a00254.html">split</a> ) {
00117 num_chunks = pt.num_chunks /= 2u;
00118 }
00119 };
00120 };
00121
-<a name="l00123"></a><a class="code" href="a00162.html">00123</a> <span class="keyword">class </span><a class="code" href="a00162.html">affinity_partitioner</a>: <span class="keyword">private</span> internal::affinity_partitioner_base_v3 {
+<a name="l00123"></a><a class="code" href="a00188.html">00123</a> <span class="keyword">class </span><a class="code" href="a00188.html">affinity_partitioner</a>: internal::affinity_partitioner_base_v3 {
00124 <span class="keyword">public</span>:
-00125 <a class="code" href="a00162.html">affinity_partitioner</a>() {}
+00125 <a class="code" href="a00188.html">affinity_partitioner</a>() {}
00126
00127 <span class="keyword">private</span>:
-00128 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00222.html">internal::start_for</a>;
-00129 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00224.html">internal::start_reduce_with_affinity</a>;
-00130 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00225.html">internal::start_scan</a>;
+00128 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00255.html">internal::start_for</a>;
+00129 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00257.html">internal::start_reduce_with_affinity</a>;
+00130 <span class="keyword">template</span><<span class="keyword">typename</span> Range, <span class="keyword">typename</span> Body, <span class="keyword">typename</span> Partitioner> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00258.html">internal::start_scan</a>;
00131
00132 <span class="keyword">typedef</span> internal::affinity_partition_type partition_type;
00133 <span class="keyword">friend</span> <span class="keyword">class </span>internal::affinity_partition_type;
@@ -132,11 +132,11 @@
00142 <span class="keyword">static</span> <span class="keyword">const</span> size_t VICTIM_CHUNKS = 4;
00143
00144 internal::affinity_id* my_array;
-00145 <a class="code" href="a00229.html">task_list</a> delay_list;
+00145 <a class="code" href="a00263.html">task_list</a> delay_list;
00146 <span class="keywordtype">unsigned</span> map_begin, map_end;
00147 size_t num_chunks;
00148 <span class="keyword">public</span>:
-00149 affinity_partition_type( <a class="code" href="a00162.html">affinity_partitioner</a>& ap ) {
+00149 affinity_partition_type( <a class="code" href="a00188.html">affinity_partitioner</a>& ap ) {
00150 __TBB_ASSERT( (factor&(factor-1))==0, <span class="stringliteral">"factor must be power of two"</span> );
00151 ap.resize(factor);
00152 my_array = ap.my_array;
@@ -190,17 +190,25 @@
00200 <span class="keywordflow">else</span>
00201 a.spawn(b);
00202 }
-00203 };
-00204
-00205 } <span class="comment">// namespace internal</span>
-00207 <span class="comment"></span>
-00208
-00209 } <span class="comment">// namespace tbb</span>
-00210
-00211 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
+00203
+00204 ~affinity_partition_type() {
+00205 <span class="comment">// The delay_list can be non-empty if an exception is thrown.</span>
+00206 <span class="keywordflow">while</span>( !delay_list.empty() ) {
+00207 task& t = delay_list.pop_front();
+00208 t.destroy(t);
+00209 }
+00210 }
+00211 };
+00212
+00213 } <span class="comment">// namespace internal</span>
+00215 <span class="comment"></span>
+00216
+00217 } <span class="comment">// namespace tbb</span>
+00218
+00219 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_partitioner_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00342.html b/doc/html/a00342.html
new file mode 100644
index 0000000..0b104e5
--- /dev/null
+++ b/doc/html/a00342.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>pipeline.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>pipeline.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_pipeline_H </span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_pipeline_H </span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "atomic.h"</span>
+00025 <span class="preprocessor">#include "task.h"</span>
+00026 <span class="preprocessor">#include <cstddef></span>
+00027
+00028 <span class="keyword">namespace </span>tbb {
+00029
+00030 <span class="keyword">class </span>pipeline;
+00031 <span class="keyword">class </span>filter;
+00032
+00034 <span class="keyword">namespace </span>internal {
+00035
+00036 <span class="comment">// The argument for PIPELINE_VERSION should be an integer between 2 and 9</span>
+00037 <span class="preprocessor">#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1</span>
+00038 <span class="preprocessor"></span>
+00039 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Token;
+00040 <span class="keyword">typedef</span> <span class="keywordtype">long</span> tokendiff_t;
+00041 <span class="keyword">class </span>stage_task;
+00042 <span class="keyword">class </span>ordered_buffer;
+00043
+00044 } <span class="comment">// namespace internal</span>
+00046 <span class="comment"></span>
+00048
+<a name="l00049"></a><a class="code" href="a00216.html">00049</a> <span class="keyword">class </span><a class="code" href="a00216.html">filter</a>: internal::no_copy {
+00050 <span class="keyword">private</span>:
+00052 <span class="keyword">static</span> <a class="code" href="a00216.html">filter</a>* not_in_pipeline() {<span class="keywordflow">return</span> reinterpret_cast<filter*>(internal::intptr(-1));}
+00053
+00055 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_serial = 0x1;
+00056
+00058 <span class="comment">// The bit was not set for parallel filters in TBB 2.1 and earlier,</span>
+00059 <span class="comment">// but is_ordered() function always treats parallel filters as out of order</span>
+00060 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> filter_is_out_of_order = 0x1<<4;
+00061
+00062 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> current_version = __TBB_PIPELINE_VERSION(4);
+00063 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_mask = 0x7<<1; <span class="comment">// bits 1-3 are for version</span>
+00064 <span class="keyword">public</span>:
+<a name="l00065"></a><a class="code" href="a00216.html#w4">00065</a> <span class="keyword">enum</span> mode {
+00067 parallel = current_version | filter_is_out_of_order,
+00069 serial_in_order = current_version | filter_is_serial,
+00071 serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,
+00073 serial = serial_in_order
+00074 };
+00075 <span class="keyword">protected</span>:
+00076 <a class="code" href="a00216.html">filter</a>( <span class="keywordtype">bool</span> is_serial_ ) :
+00077 next_filter_in_pipeline(not_in_pipeline()),
+00078 input_buffer(NULL),
+00079 my_filter_mode(static_cast<unsigned char>(is_serial_ ? serial : parallel)),
+00080 prev_filter_in_pipeline(not_in_pipeline()),
+00081 my_pipeline(NULL)
+00082 {}
+00083
+00084 filter( mode filter_mode ) :
+00085 next_filter_in_pipeline(not_in_pipeline()),
+00086 input_buffer(NULL),
+00087 my_filter_mode(static_cast<unsigned char>(filter_mode)),
+00088 prev_filter_in_pipeline(not_in_pipeline()),
+00089 my_pipeline(NULL)
+00090 {}
+00091
+00092 <span class="keyword">public</span>:
+<a name="l00094"></a><a class="code" href="a00216.html#a0">00094</a> <span class="keywordtype">bool</span> is_serial()<span class="keyword"> const </span>{
+00095 <span class="keywordflow">return</span> bool( my_filter_mode & filter_is_serial );
+00096 }
+00097
+00098 <span class="comment">// ! True if filter must receive stream in order.</span>
+00099 <span class="keywordtype">bool</span> is_ordered()<span class="keyword"> const </span>{
+00100 <span class="keywordflow">return</span> (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
+00101 }
+00102
+00104
+00105 <span class="keyword">virtual</span> <span class="keywordtype">void</span>* operator()( <span class="keywordtype">void</span>* item ) = 0;
+00106
+00108
+00109 <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~filter();
+00110
+00111 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00112 <span class="preprocessor"></span>
+00113
+<a name="l00115"></a><a class="code" href="a00216.html#a4">00115</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> finalize( <span class="keywordtype">void</span>* <span class="comment">/*item*/</span> ) {};
+00116 <span class="preprocessor">#endif</span>
+00117 <span class="preprocessor"></span>
+00118 <span class="keyword">private</span>:
+00120 <a class="code" href="a00216.html">filter</a>* next_filter_in_pipeline;
+00121
+00123 internal::ordered_buffer* input_buffer;
+00124
+00125 <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+00126 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00236.html">pipeline</a>;
+00127
+00129 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> my_filter_mode;
+00130
+00132 <a class="code" href="a00216.html">filter</a>* prev_filter_in_pipeline;
+00133
+00135 <a class="code" href="a00236.html">pipeline</a>* my_pipeline;
+00136 };
+00137
+00139
+<a name="l00140"></a><a class="code" href="a00236.html">00140</a> <span class="keyword">class </span><a class="code" href="a00236.html">pipeline</a> {
+00141 <span class="keyword">public</span>:
+00143 __TBB_EXPORTED_METHOD <a class="code" href="a00236.html">pipeline</a>();
+00144
+00147 <span class="keyword">virtual</span> __TBB_EXPORTED_METHOD ~<a class="code" href="a00236.html">pipeline</a>();
+00148
+00150 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD add_filter( <a class="code" href="a00216.html">filter</a>& filter_ );
+00151
+00153 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );
+00154
+00155 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00156 <span class="preprocessor"></span>
+00157 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, <a class="code" href="a00262.html">tbb::task_group_context</a>& context );
+00158 <span class="preprocessor">#endif</span>
+00159 <span class="preprocessor"></span>
+00161 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD clear();
+00162
+00163 <span class="keyword">private</span>:
+00164 <span class="keyword">friend</span> <span class="keyword">class </span>internal::stage_task;
+00165 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00216.html">filter</a>;
+00166
+00168 <a class="code" href="a00216.html">filter</a>* filter_list;
+00169
+00171 <a class="code" href="a00216.html">filter</a>* filter_end;
+00172
+00174 <a class="code" href="a00215.html">empty_task</a>* end_counter;
+00175
+00177 <a class="code" href="a00191.html">atomic<internal::Token></a> input_tokens;
+00178
+00180 internal::Token token_counter;
+00181
+00183 <span class="keywordtype">bool</span> end_of_input;
+00184
+00186 <span class="keywordtype">void</span> remove_filter( <a class="code" href="a00216.html">filter</a>& filter_ );
+00187
+00189 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD inject_token( <a class="code" href="a00261.html">task</a>& <span class="keyword">self</span> );
+00190
+00191 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
+00192 <span class="preprocessor"></span>
+00193 <span class="keywordtype">void</span> clear_filters();
+00194 <span class="preprocessor">#endif</span>
+00195 <span class="preprocessor"></span>};
+00196
+00197 } <span class="comment">// tbb</span>
+00198
+00199 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_pipeline_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00343.html b/doc/html/a00343.html
new file mode 100644
index 0000000..c7f23cf
--- /dev/null
+++ b/doc/html/a00343.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>queuing_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_queuing_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_mutex_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include <cstring></span>
+00025 <span class="preprocessor">#include "atomic.h"</span>
+00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+00027
+00028 <span class="keyword">namespace </span>tbb {
+00029
+00031
+<a name="l00032"></a><a class="code" href="a00238.html">00032</a> <span class="keyword">class </span><a class="code" href="a00238.html">queuing_mutex</a> {
+00033 <span class="keyword">public</span>:
+<a name="l00035"></a><a class="code" href="a00238.html#a0">00035</a> <a class="code" href="a00238.html">queuing_mutex</a>() {
+00036 q_tail = NULL;
+00037 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00038 <span class="preprocessor"></span> internal_construct();
+00039 <span class="preprocessor">#endif</span>
+00040 <span class="preprocessor"></span> }
+00041
+00043
+<a name="l00045"></a><a class="code" href="a00239.html">00045</a> <span class="keyword">class </span><a class="code" href="a00239.html">scoped_lock</a>: internal::no_copy {
+00047 <span class="keywordtype">void</span> initialize() {
+00048 <a class="code" href="a00227.html">mutex</a> = NULL;
+00049 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00050 <span class="preprocessor"></span> internal::poison_pointer(next);
+00051 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00052 }
+00053 <span class="keyword">public</span>:
+00055
+<a name="l00056"></a><a class="code" href="a00239.html#a0">00056</a> <a class="code" href="a00239.html">scoped_lock</a>() {initialize();}
+00057
+00059
+<a name="l00060"></a><a class="code" href="a00239.html#a1">00060</a> <a class="code" href="a00239.html">scoped_lock</a>( <a class="code" href="a00238.html">queuing_mutex</a>& m ) {
+00061 initialize();
+00062 <a class="code" href="a00318.html#a57a1">acquire</a>(m);
+00063 }
+00064
+<a name="l00066"></a><a class="code" href="a00239.html#a2">00066</a> ~<a class="code" href="a00239.html">scoped_lock</a>() {
+00067 <span class="keywordflow">if</span>( <a class="code" href="a00227.html">mutex</a> ) <a class="code" href="a00318.html#a57a2">release</a>();
+00068 }
+00069
+00071 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#a57a1">acquire</a>( <a class="code" href="a00238.html">queuing_mutex</a>& m );
+00072
+00074 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD try_acquire( <a class="code" href="a00238.html">queuing_mutex</a>& m );
+00075
+00077 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD <a class="code" href="a00318.html#a57a2">release</a>();
+00078
+00079 <span class="keyword">private</span>:
+00081 <a class="code" href="a00238.html">queuing_mutex</a>* <a class="code" href="a00227.html">mutex</a>;
+00082
+00084 <a class="code" href="a00239.html">scoped_lock</a> *next;
+00085
+00087
+00090 <a class="code" href="a00319.html#a21">internal::uintptr</a> going;
+00091 };
+00092
+00093 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+00094
+00095 <span class="comment">// Mutex traits</span>
+00096 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+00097 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+00098 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+00099
+00100 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+00101 <span class="keyword">private</span>:
+00103 <a class="code" href="a00191.html">atomic<scoped_lock*></a> q_tail;
+00104
+00105 };
+00106
+00107 __TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
+00108
+00109 } <span class="comment">// namespace tbb</span>
+00110
+00111 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00344.html b/doc/html/a00344.html
new file mode 100644
index 0000000..a171b7c
--- /dev/null
+++ b/doc/html/a00344.html
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>queuing_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>queuing_rw_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_queuing_rw_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_queuing_rw_mutex_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include <cstring></span>
+00025 <span class="preprocessor">#include "atomic.h"</span>
+00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+00027
+00028 <span class="keyword">namespace </span>tbb {
+00029
+00031
+<a name="l00034"></a><a class="code" href="a00240.html">00034</a> <span class="keyword">class </span><a class="code" href="a00240.html">queuing_rw_mutex</a> {
+00035 <span class="keyword">public</span>:
+<a name="l00037"></a><a class="code" href="a00240.html#a0">00037</a> <a class="code" href="a00240.html">queuing_rw_mutex</a>() {
+00038 q_tail = NULL;
+00039 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00040 <span class="preprocessor"></span> internal_construct();
+00041 <span class="preprocessor">#endif</span>
+00042 <span class="preprocessor"></span> }
+00043
+<a name="l00045"></a><a class="code" href="a00240.html#a1">00045</a> ~<a class="code" href="a00240.html">queuing_rw_mutex</a>() {
+00046 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00047 <span class="preprocessor"></span> __TBB_ASSERT( !q_tail, <span class="stringliteral">"destruction of an acquired mutex"</span>);
+00048 <span class="preprocessor">#endif</span>
+00049 <span class="preprocessor"></span> }
+00050
+00051 <span class="keyword">class </span>scoped_lock;
+00052 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+00053
+00055
+<a name="l00057"></a><a class="code" href="a00241.html">00057</a> <span class="keyword">class </span><a class="code" href="a00241.html">scoped_lock</a>: internal::no_copy {
+00059 <span class="keywordtype">void</span> initialize() {
+00060 <a class="code" href="a00227.html">mutex</a> = NULL;
+00061 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00062 <span class="preprocessor"></span> state = 0xFF; <span class="comment">// Set to invalid state</span>
+00063 internal::poison_pointer(next);
+00064 internal::poison_pointer(prev);
+00065 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00066 }
+00067 <span class="keyword">public</span>:
+00069
+<a name="l00070"></a><a class="code" href="a00241.html#a0">00070</a> <a class="code" href="a00241.html">scoped_lock</a>() {initialize();}
+00071
+00073
+<a name="l00074"></a><a class="code" href="a00241.html#a1">00074</a> <a class="code" href="a00241.html">scoped_lock</a>( <a class="code" href="a00240.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> ) {
+00075 initialize();
+00076 <a class="code" href="a00318.html#a57a1">acquire</a>(m,write);
+00077 }
+00078
+<a name="l00080"></a><a class="code" href="a00241.html#a2">00080</a> ~<a class="code" href="a00241.html">scoped_lock</a>() {
+00081 <span class="keywordflow">if</span>( <a class="code" href="a00227.html">mutex</a> ) <a class="code" href="a00318.html#a57a2">release</a>();
+00082 }
+00083
+00085 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( <a class="code" href="a00240.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+00086
+00088 <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00240.html">queuing_rw_mutex</a>& m, <span class="keywordtype">bool</span> write=<span class="keyword">true</span> );
+00089
+00091 <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>();
+00092
+00094
+00095 <span class="keywordtype">bool</span> upgrade_to_writer();
+00096
+00098 <span class="keywordtype">bool</span> downgrade_to_reader();
+00099
+00100 <span class="keyword">private</span>:
+00102 <a class="code" href="a00240.html">queuing_rw_mutex</a>* <a class="code" href="a00227.html">mutex</a>;
+00103
+00105 <a class="code" href="a00241.html">scoped_lock</a> * prev, * next;
+00106
+00107 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> state_t;
+00108
+00110 <a class="code" href="a00191.html">atomic<state_t></a> state;
+00111
+00113
+00114 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> going;
+00115
+00117 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> internal_lock;
+00118
+00120 <span class="keywordtype">void</span> acquire_internal_lock();
+00121
+00123
+00124 <span class="keywordtype">bool</span> try_acquire_internal_lock();
+00125
+00127 <span class="keywordtype">void</span> release_internal_lock();
+00128
+00130 <span class="keywordtype">void</span> wait_for_release_of_internal_lock();
+00131
+00133 <span class="keywordtype">void</span> unblock_or_wait_on_internal_lock( uintptr_t );
+00134 };
+00135
+00136 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+00137
+00138 <span class="comment">// Mutex traits</span>
+00139 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+00140 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+00141 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">true</span>;
+00142
+00143 <span class="keyword">private</span>:
+00145 <a class="code" href="a00191.html">atomic<scoped_lock*></a> q_tail;
+00146
+00147 };
+00148
+00149 __TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
+00150
+00151 } <span class="comment">// namespace tbb</span>
+00152
+00153 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_queuing_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00303.html b/doc/html/a00345.html
similarity index 75%
rename from doc/html/a00303.html
rename to doc/html/a00345.html
index 926ee1c..be4e3e8 100644
--- a/doc/html/a00303.html
+++ b/doc/html/a00345.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>recursive_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -47,15 +47,15 @@
00040
00041 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00042
-00043 <span class="preprocessor">#include <stdio.h></span>
-00044 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00043 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00044 <span class="preprocessor">#include "tbb_profiling.h"</span>
00045
00046 <span class="keyword">namespace </span>tbb {
00048
-<a name="l00050"></a><a class="code" href="a00214.html">00050</a> <span class="keyword">class </span><a class="code" href="a00214.html">recursive_mutex</a> {
+<a name="l00050"></a><a class="code" href="a00245.html">00050</a> <span class="keyword">class </span><a class="code" href="a00245.html">recursive_mutex</a> {
00051 <span class="keyword">public</span>:
-<a name="l00053"></a><a class="code" href="a00214.html#a0">00053</a> <a class="code" href="a00214.html">recursive_mutex</a>() {
-00054 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00053"></a><a class="code" href="a00245.html#a0">00053</a> <a class="code" href="a00245.html">recursive_mutex</a>() {
+00054 <span class="preprocessor">#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS</span>
00055 <span class="preprocessor"></span> internal_construct();
00056 <span class="preprocessor">#else</span>
00057 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -73,11 +73,11 @@
00069
00070 pthread_mutexattr_destroy( &mtx_attr );
00071 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64*/</span>
-00072 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00072 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00073 };
00074
-00075 ~<a class="code" href="a00214.html">recursive_mutex</a>() {
-00076 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+00075 ~<a class="code" href="a00245.html">recursive_mutex</a>() {
+00076 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00077 <span class="preprocessor"></span> internal_destroy();
00078 <span class="preprocessor">#else</span>
00079 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -86,59 +86,59 @@
00082 <span class="preprocessor"></span> pthread_mutex_destroy(&impl);
00083
00084 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00085 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00085 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00086 };
00087
00088 <span class="keyword">class </span>scoped_lock;
00089 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
00090
00092
-<a name="l00094"></a><a class="code" href="a00215.html">00094</a> <span class="keyword">class </span><a class="code" href="a00215.html">scoped_lock</a> : <span class="keyword">private</span> internal::no_copy {
+<a name="l00094"></a><a class="code" href="a00246.html">00094</a> <span class="keyword">class </span><a class="code" href="a00246.html">scoped_lock</a>: internal::no_copy {
00095 <span class="keyword">public</span>:
-<a name="l00097"></a><a class="code" href="a00215.html#a0">00097</a> <a class="code" href="a00215.html">scoped_lock</a>() : my_mutex(NULL) {};
+<a name="l00097"></a><a class="code" href="a00246.html#a0">00097</a> <a class="code" href="a00246.html">scoped_lock</a>() : my_mutex(NULL) {};
00098
00100
-<a name="l00101"></a><a class="code" href="a00215.html#a1">00101</a> <a class="code" href="a00215.html">scoped_lock</a>( <a class="code" href="a00214.html">recursive_mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00102 <a class="code" href="a00278.html#a37a1">acquire</a>( mutex );
+<a name="l00101"></a><a class="code" href="a00246.html#a1">00101</a> <a class="code" href="a00246.html">scoped_lock</a>( <a class="code" href="a00245.html">recursive_mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00102 <a class="code" href="a00318.html#a57a1">acquire</a>( mutex );
00103 }
00104
-<a name="l00106"></a><a class="code" href="a00215.html#a2">00106</a> ~<a class="code" href="a00215.html">scoped_lock</a>() {
+<a name="l00106"></a><a class="code" href="a00246.html#a2">00106</a> ~<a class="code" href="a00246.html">scoped_lock</a>() {
00107 <span class="keywordflow">if</span>( my_mutex )
-00108 <a class="code" href="a00278.html#a37a2">release</a>();
+00108 <a class="code" href="a00318.html#a57a2">release</a>();
00109 }
00110
-<a name="l00112"></a><a class="code" href="a00215.html#a3">00112</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a1">acquire</a>( <a class="code" href="a00214.html">recursive_mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00113 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00112"></a><a class="code" href="a00246.html#a3">00112</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( <a class="code" href="a00245.html">recursive_mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00113 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00114 <span class="preprocessor"></span> internal_acquire( mutex );
00115 <span class="preprocessor">#else</span>
00116 <span class="preprocessor"></span> my_mutex = &mutex;
00117 <span class="preprocessor"> #if _WIN32||_WIN64</span>
-00118 <span class="preprocessor"></span> EnterCriticalSection(&mutex.<a class="code" href="a00214.html#r0">impl</a>);
+00118 <span class="preprocessor"></span> EnterCriticalSection(&mutex.<a class="code" href="a00245.html#r0">impl</a>);
00119 <span class="preprocessor"> #else</span>
-00120 <span class="preprocessor"></span> pthread_mutex_lock( &mutex.<a class="code" href="a00214.html#r0">impl</a> );
+00120 <span class="preprocessor"></span> pthread_mutex_lock( &mutex.<a class="code" href="a00245.html#r0">impl</a> );
00121 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00122 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00123 }
00124
-<a name="l00126"></a><a class="code" href="a00215.html#a4">00126</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00214.html">recursive_mutex</a>& <a class="code" href="a00198.html">mutex</a> ) {
-00127 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00126"></a><a class="code" href="a00246.html#a4">00126</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00245.html">recursive_mutex</a>& <a class="code" href="a00227.html">mutex</a> ) {
+00127 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00128 <span class="preprocessor"></span> <span class="keywordflow">return</span> internal_try_acquire( mutex );
00129 <span class="preprocessor">#else</span>
00130 <span class="preprocessor"></span> <span class="keywordtype">bool</span> result;
00131 <span class="preprocessor"> #if _WIN32||_WIN64</span>
-00132 <span class="preprocessor"></span> result = TryEnterCriticalSection(&mutex.<a class="code" href="a00214.html#r0">impl</a>)!=0;
+00132 <span class="preprocessor"></span> result = TryEnterCriticalSection(&mutex.<a class="code" href="a00245.html#r0">impl</a>)!=0;
00133 <span class="preprocessor"> #else</span>
-00134 <span class="preprocessor"></span> result = pthread_mutex_trylock(&mutex.<a class="code" href="a00214.html#r0">impl</a>)==0;
+00134 <span class="preprocessor"></span> result = pthread_mutex_trylock(&mutex.<a class="code" href="a00245.html#r0">impl</a>)==0;
00135 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00136 <span class="keywordflow">if</span>( result )
00137 my_mutex = &mutex;
00138
00139 <span class="keywordflow">return</span> result;
-00140 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00140 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00141 }
00142
-<a name="l00144"></a><a class="code" href="a00215.html#a5">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00278.html#a37a2">release</a>() {
-00145 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00144"></a><a class="code" href="a00246.html#a5">00144</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {
+00145 <span class="preprocessor">#if TBB_USE_ASSERT</span>
00146 <span class="preprocessor"></span> internal_release ();
00147 <span class="preprocessor">#else</span>
00148 <span class="preprocessor"></span><span class="preprocessor"> #if _WIN32||_WIN64</span>
@@ -147,17 +147,17 @@
00151 <span class="preprocessor"></span> pthread_mutex_unlock(&my_mutex->impl);
00152 <span class="preprocessor"> #endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00153 my_mutex = NULL;
-00154 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00154 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
00155 }
00156
00157 <span class="keyword">private</span>:
-00159 <a class="code" href="a00214.html">recursive_mutex</a>* my_mutex;
+00159 <a class="code" href="a00245.html">recursive_mutex</a>* my_mutex;
00160
-00162 <span class="keywordtype">void</span> internal_acquire( <a class="code" href="a00214.html">recursive_mutex</a>& m );
+00162 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00245.html">recursive_mutex</a>& m );
00163
-00165 <span class="keywordtype">bool</span> internal_try_acquire( <a class="code" href="a00214.html">recursive_mutex</a>& m );
+00165 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00245.html">recursive_mutex</a>& m );
00166
-00168 <span class="keywordtype">void</span> internal_release();
+00168 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
00169 };
00170
00171 <span class="comment">// Mutex traits</span>
@@ -176,17 +176,19 @@
00184 <span class="preprocessor"></span> pthread_mutex_t impl;
00185 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
00186
-00188 <span class="keywordtype">void</span> internal_construct();
+00188 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
00189
-00191 <span class="keywordtype">void</span> internal_destroy();
+00191 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_destroy();
00192 };
00193
-00194 } <span class="comment">// namespace tbb </span>
+00194 __TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
00195
-00196 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_mutex_H */</span>
+00196 } <span class="comment">// namespace tbb </span>
+00197
+00198 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_recursive_mutex_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00346.html b/doc/html/a00346.html
new file mode 100644
index 0000000..e30f364
--- /dev/null
+++ b/doc/html/a00346.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>scalable_allocator.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>scalable_allocator.h</h1><a href="a00304.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_scalable_allocator_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_scalable_allocator_H</span>
+00023 <span class="preprocessor"></span>
+00025 <span class="preprocessor">#include <stddef.h></span> <span class="comment">/* Need ptrdiff_t and size_t from here. */</span>
+00026
+00027 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+00028 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (push)</span>
+00029 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 991)</span>
+00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00031 <span class="preprocessor"></span>
+00032 <span class="preprocessor">#ifdef __cplusplus</span>
+00033 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
+00034 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+00035
+00036 <span class="preprocessor">#if _MSC_VER >= 1400</span>
+00037 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC __cdecl</span>
+00038 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00039 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00041 <span class="preprocessor"></span>
+00044 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a0">scalable_malloc</a> (size_t size);
+00045
+00048 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a1">scalable_free</a> (<span class="keywordtype">void</span>* ptr);
+00049
+00052 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a2">scalable_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size);
+00053
+00056 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a3">scalable_calloc</a> (size_t nobj, size_t size);
+00057
+00060 <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a4">scalable_posix_memalign</a> (<span class="keywordtype">void</span>** memptr, size_t alignment, size_t size);
+00061
+00064 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a5">scalable_aligned_malloc</a> (size_t size, size_t alignment);
+00065
+00068 <span class="keywordtype">void</span> * __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a6">scalable_aligned_realloc</a> (<span class="keywordtype">void</span>* ptr, size_t size, size_t alignment);
+00069
+00072 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00304.html#a7">scalable_aligned_free</a> (<span class="keywordtype">void</span>* ptr);
+00073
+00074 <span class="preprocessor">#ifdef __cplusplus</span>
+00075 <span class="preprocessor"></span>} <span class="comment">/* extern "C" */</span>
+00076 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+00077
+00078 <span class="preprocessor">#ifdef __cplusplus</span>
+00079 <span class="preprocessor"></span>
+00080 <span class="preprocessor">#include <new></span> <span class="comment">/* To use new with the placement argument */</span>
+00081
+00082 <span class="keyword">namespace </span>tbb {
+00083
+00084 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00085 <span class="preprocessor"></span> <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+00086 <span class="preprocessor"> #pragma warning (push)</span>
+00087 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4100)</span>
+00088 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00089 <span class="preprocessor"></span>
+00091
+00094 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00095"></a><a class="code" href="a00247.html">00095</a> <span class="keyword">class </span><a class="code" href="a00247.html">scalable_allocator</a> {
+00096 <span class="keyword">public</span>:
+00097 <span class="keyword">typedef</span> T* pointer;
+00098 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+00099 <span class="keyword">typedef</span> T& reference;
+00100 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00101 <span class="keyword">typedef</span> T value_type;
+00102 <span class="keyword">typedef</span> size_t size_type;
+00103 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00104 <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+00105 <span class="keyword">typedef</span> <a class="code" href="a00247.html">scalable_allocator<U></a> other;
+00106 };
+00107
+00108 <a class="code" href="a00247.html">scalable_allocator</a>() <span class="keywordflow">throw</span>() {}
+00109 <a class="code" href="a00247.html">scalable_allocator</a>( <span class="keyword">const</span> <a class="code" href="a00247.html">scalable_allocator</a>& ) <span class="keywordflow">throw</span>() {}
+00110 <span class="keyword">template</span><<span class="keyword">typename</span> U> <a class="code" href="a00247.html">scalable_allocator</a>(<span class="keyword">const</span> <a class="code" href="a00247.html">scalable_allocator<U></a>&) <span class="keywordflow">throw</span>() {}
+00111
+00112 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00113 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00114
+<a name="l00116"></a><a class="code" href="a00247.html#a5">00116</a> pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> =0 ) {
+00117 <span class="keywordflow">return</span> static_cast<pointer>( <a class="code" href="a00304.html#a0">scalable_malloc</a>( n * <span class="keyword">sizeof</span>(value_type) ) );
+00118 }
+00119
+<a name="l00121"></a><a class="code" href="a00247.html#a6">00121</a> <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
+00122 <a class="code" href="a00304.html#a1">scalable_free</a>( p );
+00123 }
+00124
+<a name="l00126"></a><a class="code" href="a00247.html#a7">00126</a> size_type max_size() const throw() {
+00127 size_type absolutemax = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (T);
+00128 <span class="keywordflow">return</span> (absolutemax > 0 ? absolutemax : 1);
+00129 }
+00130 <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& val ) { <span class="keyword">new</span>(static_cast<void*>(p)) T(val); }
+00131 <span class="keywordtype">void</span> destroy( pointer p ) {p->~T();}
+00132 };
+00133
+00134 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00135 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00136 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+00137 <span class="preprocessor"></span>
+00139
+00140 <span class="keyword">template</span><>
+<a name="l00141"></a><a class="code" href="a00248.html">00141</a> <span class="keyword">class </span><a class="code" href="a00247.html">scalable_allocator</a><void> {
+00142 <span class="keyword">public</span>:
+00143 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+00144 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+00145 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+00146 <span class="keyword">template</span><<span class="keyword">class</span> U> <span class="keyword">struct </span>rebind {
+00147 <span class="keyword">typedef</span> <a class="code" href="a00247.html">scalable_allocator<U></a> other;
+00148 };
+00149 };
+00150
+00151 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00152 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00247.html">scalable_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00247.html">scalable_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+00153
+00154 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00155 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> scalable_allocator<T>&, <span class="keyword">const</span> scalable_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+00156
+00157 } <span class="comment">// namespace tbb</span>
+00158
+00159 <span class="preprocessor">#if _MSC_VER</span>
+00160 <span class="preprocessor"></span><span class="preprocessor"> #if __TBB_BUILD && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)</span>
+00161 <span class="preprocessor"></span><span class="preprocessor"> #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1</span>
+00162 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
+00163 <span class="preprocessor"></span>
+00164 <span class="preprocessor"> #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE</span>
+00165 <span class="preprocessor"></span><span class="preprocessor"> #ifdef _DEBUG</span>
+00166 <span class="preprocessor"></span><span class="preprocessor"> #pragma comment(lib, "tbbmalloc_debug.lib")</span>
+00167 <span class="preprocessor"></span><span class="preprocessor"> #else</span>
+00168 <span class="preprocessor"></span><span class="preprocessor"> #pragma comment(lib, "tbbmalloc.lib")</span>
+00169 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
+00170 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
+00171 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00172 <span class="preprocessor"></span>
+00173 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
+00174
+00175 <span class="preprocessor">#if !defined(__cplusplus) && __ICC==1100</span>
+00176 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00177 <span class="preprocessor"></span><span class="preprocessor">#endif // ICC 11.0 warning 991 is back</span>
+00178 <span class="preprocessor"></span>
+00179 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_scalable_allocator_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00347.html b/doc/html/a00347.html
new file mode 100644
index 0000000..a0d12a3
--- /dev/null
+++ b/doc/html/a00347.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>spin_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_spin_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_mutex_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include <cstddef></span>
+00025 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00026 <span class="preprocessor">#include "tbb_machine.h"</span>
+00027 <span class="preprocessor">#include "tbb_profiling.h"</span>
+00028
+00029 <span class="keyword">namespace </span>tbb {
+00030
+00032
+<a name="l00037"></a><a class="code" href="a00250.html">00037</a> <span class="keyword">class </span><a class="code" href="a00250.html">spin_mutex</a> {
+00039 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> flag;
+00040
+00041 <span class="keyword">public</span>:
+00043
+<a name="l00044"></a><a class="code" href="a00250.html#a0">00044</a> <a class="code" href="a00250.html">spin_mutex</a>() : flag(0) {
+00045 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00046 <span class="preprocessor"></span> internal_construct();
+00047 <span class="preprocessor">#endif</span>
+00048 <span class="preprocessor"></span> }
+00049
+<a name="l00051"></a><a class="code" href="a00251.html">00051</a> <span class="keyword">class </span><a class="code" href="a00251.html">scoped_lock</a> : internal::no_copy {
+00052 <span class="keyword">private</span>:
+00054 <a class="code" href="a00250.html">spin_mutex</a>* my_mutex;
+00055
+00057 <a class="code" href="a00319.html#a21">internal::uintptr</a> my_unlock_value;
+00058
+00060 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire( <a class="code" href="a00250.html">spin_mutex</a>& m );
+00061
+00063 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire( <a class="code" href="a00250.html">spin_mutex</a>& m );
+00064
+00066 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release();
+00067
+00068 <span class="keyword">public</span>:
+<a name="l00070"></a><a class="code" href="a00251.html#a0">00070</a> <a class="code" href="a00251.html">scoped_lock</a>() : my_mutex(NULL), my_unlock_value(0) {}
+00071
+<a name="l00073"></a><a class="code" href="a00251.html#a1">00073</a> <a class="code" href="a00251.html">scoped_lock</a>( <a class="code" href="a00250.html">spin_mutex</a>& m ) {
+00074 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00075 <span class="preprocessor"></span> my_mutex=NULL;
+00076 internal_acquire(m);
+00077 <span class="preprocessor">#else</span>
+00078 <span class="preprocessor"></span> my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00250.html#r0">flag</a>);
+00079 my_mutex=&m;
+00080 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+00081 }
+00082
+<a name="l00084"></a><a class="code" href="a00251.html#a2">00084</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( <a class="code" href="a00250.html">spin_mutex</a>& m ) {
+00085 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00086 <span class="preprocessor"></span> internal_acquire(m);
+00087 <span class="preprocessor">#else</span>
+00088 <span class="preprocessor"></span> my_unlock_value = __TBB_LockByte(m.<a class="code" href="a00250.html#r0">flag</a>);
+00089 my_mutex = &m;
+00090 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+00091 }
+00092
+<a name="l00094"></a><a class="code" href="a00251.html#a3">00094</a> <span class="keywordtype">bool</span> try_acquire( <a class="code" href="a00250.html">spin_mutex</a>& m ) {
+00095 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00096 <span class="preprocessor"></span> <span class="keywordflow">return</span> internal_try_acquire(m);
+00097 <span class="preprocessor">#else</span>
+00098 <span class="preprocessor"></span> <span class="keywordtype">bool</span> result = __TBB_TryLockByte(m.<a class="code" href="a00250.html#r0">flag</a>);
+00099 <span class="keywordflow">if</span>( result ) {
+00100 my_unlock_value = 0;
+00101 my_mutex = &m;
+00102 }
+00103 <span class="keywordflow">return</span> result;
+00104 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/</span>
+00105 }
+00106
+<a name="l00108"></a><a class="code" href="a00251.html#a4">00108</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {
+00109 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00110 <span class="preprocessor"></span> internal_release();
+00111 <span class="preprocessor">#else</span>
+00112 <span class="preprocessor"></span> __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+00113 my_mutex = NULL;
+00114 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+00115 }
+00116
+<a name="l00118"></a><a class="code" href="a00251.html#a5">00118</a> ~<a class="code" href="a00251.html">scoped_lock</a>() {
+00119 <span class="keywordflow">if</span>( my_mutex ) {
+00120 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00121 <span class="preprocessor"></span> internal_release();
+00122 <span class="preprocessor">#else</span>
+00123 <span class="preprocessor"></span> __TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
+00124 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+00125 }
+00126 }
+00127 };
+00128
+00129 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+00130
+00131 <span class="comment">// Mutex traits</span>
+00132 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">false</span>;
+00133 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+00134 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+00135
+00136 <span class="keyword">friend</span> <span class="keyword">class </span>scoped_lock;
+00137 };
+00138
+00139 __TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
+00140
+00141 } <span class="comment">// namespace tbb</span>
+00142
+00143 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00348.html b/doc/html/a00348.html
new file mode 100644
index 0000000..3138fd1
--- /dev/null
+++ b/doc/html/a00348.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>spin_rw_mutex.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>spin_rw_mutex.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_spin_rw_mutex_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_spin_rw_mutex_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00025 <span class="preprocessor">#include "tbb_machine.h"</span>
+00026 <span class="preprocessor">#include "tbb_profiling.h"</span>
+00027
+00028 <span class="keyword">namespace </span>tbb {
+00029
+00030 <span class="keyword">class </span>spin_rw_mutex_v3;
+00031 <span class="keyword">typedef</span> spin_rw_mutex_v3 spin_rw_mutex;
+00032
+00034
+<a name="l00035"></a><a class="code" href="a00252.html">00035</a> <span class="keyword">class </span><a class="code" href="a00252.html">spin_rw_mutex_v3</a> {
+00037
+00039 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_acquire_writer();
+00040
+00042
+00043 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_writer();
+00044
+00046 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_acquire_reader();
+00047
+00049 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_upgrade();
+00050
+00052
+00053 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_downgrade();
+00054
+00056 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_release_reader();
+00057
+00059 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_writer();
+00060
+00062 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD internal_try_acquire_reader();
+00063
+00065 <span class="keyword">public</span>:
+<a name="l00067"></a><a class="code" href="a00252.html#a0">00067</a> <a class="code" href="a00252.html">spin_rw_mutex_v3</a>() : state(0) {
+00068 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS</span>
+00069 <span class="preprocessor"></span> internal_construct();
+00070 <span class="preprocessor">#endif</span>
+00071 <span class="preprocessor"></span> }
+00072
+00073 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00074 <span class="preprocessor"></span>
+<a name="l00075"></a><a class="code" href="a00252.html#a1">00075</a> ~<a class="code" href="a00252.html">spin_rw_mutex_v3</a>() {
+00076 __TBB_ASSERT( !state, <span class="stringliteral">"destruction of an acquired mutex"</span>);
+00077 };
+00078 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00079
+00081
+<a name="l00083"></a><a class="code" href="a00253.html">00083</a> <span class="keyword">class </span><a class="code" href="a00253.html">scoped_lock</a> : internal::no_copy {
+00084 <span class="keyword">public</span>:
+00086
+<a name="l00087"></a><a class="code" href="a00253.html#a0">00087</a> <a class="code" href="a00253.html">scoped_lock</a>() : <a class="code" href="a00227.html">mutex</a>(NULL) {}
+00088
+00090
+<a name="l00091"></a><a class="code" href="a00253.html#a1">00091</a> <a class="code" href="a00253.html">scoped_lock</a>( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) : <a class="code" href="a00227.html">mutex</a>(NULL) {
+00092 <a class="code" href="a00318.html#a57a1">acquire</a>(m, write);
+00093 }
+00094
+<a name="l00096"></a><a class="code" href="a00253.html#a2">00096</a> ~<a class="code" href="a00253.html">scoped_lock</a>() {
+00097 <span class="keywordflow">if</span>( <a class="code" href="a00227.html">mutex</a> ) <a class="code" href="a00318.html#a57a2">release</a>();
+00098 }
+00099
+<a name="l00101"></a><a class="code" href="a00253.html#a3">00101</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a1">acquire</a>( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+00102 __TBB_ASSERT( !<a class="code" href="a00227.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+00103 is_writer = write;
+00104 <a class="code" href="a00227.html">mutex</a> = &m;
+00105 <span class="keywordflow">if</span>( write ) <a class="code" href="a00227.html">mutex</a>-><a class="code" href="a00252.html#d0">internal_acquire_writer</a>();
+00106 <span class="keywordflow">else</span> <a class="code" href="a00227.html">mutex</a>-><a class="code" href="a00252.html#d2">internal_acquire_reader</a>();
+00107 }
+00108
+00110
+<a name="l00111"></a><a class="code" href="a00253.html#a4">00111</a> <span class="keywordtype">bool</span> upgrade_to_writer() {
+00112 __TBB_ASSERT( <a class="code" href="a00227.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+00113 __TBB_ASSERT( !is_writer, <span class="stringliteral">"not a reader"</span> );
+00114 is_writer = <span class="keyword">true</span>;
+00115 <span class="keywordflow">return</span> <a class="code" href="a00227.html">mutex</a>-><a class="code" href="a00252.html#d3">internal_upgrade</a>();
+00116 }
+00117
+<a name="l00119"></a><a class="code" href="a00253.html#a5">00119</a> <span class="keywordtype">void</span> <a class="code" href="a00318.html#a57a2">release</a>() {
+00120 __TBB_ASSERT( <a class="code" href="a00227.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+00121 spin_rw_mutex *m = <a class="code" href="a00227.html">mutex</a>;
+00122 <a class="code" href="a00227.html">mutex</a> = NULL;
+00123 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00124 <span class="preprocessor"></span> <span class="keywordflow">if</span>( is_writer ) m-><a class="code" href="a00252.html#d1">internal_release_writer</a>();
+00125 <span class="keywordflow">else</span> m-><a class="code" href="a00252.html#d5">internal_release_reader</a>();
+00126 <span class="preprocessor">#else</span>
+00127 <span class="preprocessor"></span> <span class="keywordflow">if</span>( is_writer ) __TBB_AtomicAND( &m-><a class="code" href="a00252.html#r0">state</a>, READERS );
+00128 <span class="keywordflow">else</span> __TBB_FetchAndAddWrelease( &m-><a class="code" href="a00252.html#r0">state</a>, -(intptr_t)ONE_READER);
+00129 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+00130 }
+00131
+<a name="l00133"></a><a class="code" href="a00253.html#a6">00133</a> <span class="keywordtype">bool</span> downgrade_to_reader() {
+00134 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
+00135 <span class="preprocessor"></span> __TBB_ASSERT( <a class="code" href="a00227.html">mutex</a>, <span class="stringliteral">"lock is not acquired"</span> );
+00136 __TBB_ASSERT( is_writer, <span class="stringliteral">"not a writer"</span> );
+00137 <a class="code" href="a00227.html">mutex</a>-><a class="code" href="a00252.html#d4">internal_downgrade</a>();
+00138 <span class="preprocessor">#else</span>
+00139 <span class="preprocessor"></span> __TBB_FetchAndAddW( &<a class="code" href="a00227.html">mutex</a>->state, ((intptr_t)ONE_READER-WRITER));
+00140 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
+00141 is_writer = <span class="keyword">false</span>;
+00142
+00143 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00144 }
+00145
+<a name="l00147"></a><a class="code" href="a00253.html#a7">00147</a> <span class="keywordtype">bool</span> try_acquire( spin_rw_mutex& m, <span class="keywordtype">bool</span> write = <span class="keyword">true</span> ) {
+00148 __TBB_ASSERT( !<a class="code" href="a00227.html">mutex</a>, <span class="stringliteral">"holding mutex already"</span> );
+00149 <span class="keywordtype">bool</span> result;
+00150 is_writer = write;
+00151 result = write? m.<a class="code" href="a00252.html#d6">internal_try_acquire_writer</a>()
+00152 : m.<a class="code" href="a00252.html#d7">internal_try_acquire_reader</a>();
+00153 <span class="keywordflow">if</span>( result )
+00154 <a class="code" href="a00227.html">mutex</a> = &m;
+00155 <span class="keywordflow">return</span> result;
+00156 }
+00157
+00158 <span class="keyword">private</span>:
+00160 spin_rw_mutex* <a class="code" href="a00227.html">mutex</a>;
+00161
+00163
+00164 <span class="keywordtype">bool</span> is_writer;
+00165 };
+00166
+00167 <span class="comment">// Mutex traits</span>
+00168 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_rw_mutex = <span class="keyword">true</span>;
+00169 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_recursive_mutex = <span class="keyword">false</span>;
+00170 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> is_fair_mutex = <span class="keyword">false</span>;
+00171
+00172 <span class="keyword">private</span>:
+00173 <span class="keyword">typedef</span> intptr_t state_t;
+00174 <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER = 1;
+00175 <span class="keyword">static</span> <span class="keyword">const</span> state_t WRITER_PENDING = 2;
+00176 <span class="keyword">static</span> <span class="keyword">const</span> state_t READERS = ~(WRITER | WRITER_PENDING);
+00177 <span class="keyword">static</span> <span class="keyword">const</span> state_t ONE_READER = 4;
+00178 <span class="keyword">static</span> <span class="keyword">const</span> state_t BUSY = WRITER | READERS;
+00180
+00183 state_t state;
+00184
+00185 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_construct();
+00186 };
+00187
+00188 __TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
+00189
+00190 } <span class="comment">// namespace tbb</span>
+00191
+00192 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_spin_rw_mutex_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00307.html b/doc/html/a00349.html
similarity index 65%
rename from doc/html/a00307.html
rename to doc/html/a00349.html
index ff3f211..f8f5557 100644
--- a/doc/html/a00307.html
+++ b/doc/html/a00349.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>task.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -31,7 +31,7 @@
00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
00025
00026 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00027 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/cache_aligned_allocator.h"</span>
+00027 <span class="preprocessor"></span><span class="preprocessor">#include "cache_aligned_allocator.h"</span>
00028 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00029
00030 <span class="keyword">namespace </span>tbb {
@@ -45,7 +45,7 @@
00038
00040 <span class="keyword">namespace </span>internal {
00041
-00042 <span class="keyword">class </span>scheduler {
+00042 <span class="keyword">class </span>scheduler: no_copy {
00043 <span class="keyword">public</span>:
00045 <span class="keyword">virtual</span> <span class="keywordtype">void</span> spawn( task& first, task*& next ) = 0;
00046
@@ -58,9 +58,9 @@
00056 };
00057
00059
-<a name="l00060"></a><a class="code" href="a00279.html#a11">00060</a> <span class="keyword">typedef</span> <a class="code" href="a00279.html#a14">intptr</a> reference_count;
+<a name="l00060"></a><a class="code" href="a00319.html#a10">00060</a> <span class="keyword">typedef</span> <a class="code" href="a00319.html#a22">intptr</a> reference_count;
00061
-<a name="l00063"></a><a class="code" href="a00279.html#a12">00063</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
+<a name="l00063"></a><a class="code" href="a00319.html#a11">00063</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> affinity_id;
00064
00065 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
00066 <span class="preprocessor"></span> <span class="keyword">struct </span>context_list_node_t {
@@ -68,47 +68,47 @@
00068 *my_next;
00069 };
00070
-00071 <span class="keyword">class </span>allocate_root_with_context_proxy {
-00072 task_group_context& my_context;
+00071 <span class="keyword">class </span>allocate_root_with_context_proxy: no_assign {
+00072 <a class="code" href="a00262.html">task_group_context</a>& my_context;
00073 <span class="keyword">public</span>:
-00074 allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
-00075 task& allocate( size_t size ) <span class="keyword">const</span>;
-00076 <span class="keywordtype">void</span> free( task& ) <span class="keyword">const</span>;
+00074 allocate_root_with_context_proxy ( <a class="code" href="a00262.html">task_group_context</a>& ctx ) : my_context(ctx) {}
+00075 task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+00076 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
00077 };
00078 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00079
-00080 <span class="keyword">class </span>allocate_root_proxy {
+00080 <span class="keyword">class </span>allocate_root_proxy: no_assign {
00081 <span class="keyword">public</span>:
-00082 <span class="keyword">static</span> task& allocate( size_t size );
-00083 <span class="keyword">static</span> <span class="keywordtype">void</span> free( task& );
+00082 <span class="keyword">static</span> task& __TBB_EXPORTED_FUNC allocate( size_t size );
+00083 <span class="keyword">static</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC free( task& );
00084 };
00085
-00086 <span class="keyword">class </span>allocate_continuation_proxy {
+00086 <span class="keyword">class </span>allocate_continuation_proxy: no_assign {
00087 <span class="keyword">public</span>:
-00088 task& allocate( size_t size ) <span class="keyword">const</span>;
-00089 <span class="keywordtype">void</span> free( task& ) <span class="keyword">const</span>;
+00088 task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+00089 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
00090 };
00091
-00092 <span class="keyword">class </span>allocate_child_proxy {
+00092 <span class="keyword">class </span>allocate_child_proxy: no_assign {
00093 <span class="keyword">public</span>:
-00094 task& allocate( size_t size ) <span class="keyword">const</span>;
-00095 <span class="keywordtype">void</span> free( task& ) <span class="keyword">const</span>;
+00094 task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+00095 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
00096 };
00097
-00098 <span class="keyword">class </span>allocate_additional_child_of_proxy {
+00098 <span class="keyword">class </span>allocate_additional_child_of_proxy: no_assign {
00099 task& <span class="keyword">self</span>;
00100 task& parent;
00101 <span class="keyword">public</span>:
00102 allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
-00103 task& allocate( size_t size ) <span class="keyword">const</span>;
-00104 <span class="keywordtype">void</span> free( task& ) <span class="keyword">const</span>;
+00103 task& __TBB_EXPORTED_METHOD allocate( size_t size ) <span class="keyword">const</span>;
+00104 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD free( task& ) <span class="keyword">const</span>;
00105 };
00106
00108
-<a name="l00113"></a><a class="code" href="a00230.html">00113</a> <span class="keyword">class </span><a class="code" href="a00230.html">task_prefix</a> {
+<a name="l00113"></a><a class="code" href="a00264.html">00113</a> <span class="keyword">class </span><a class="code" href="a00264.html">task_prefix</a> {
00114 <span class="keyword">private</span>:
-00115 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00228.html">tbb::task</a>;
-00116 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00229.html">tbb::task_list</a>;
+00115 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00261.html">tbb::task</a>;
+00116 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00263.html">tbb::task_list</a>;
00117 <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
00118 <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
00119 <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_child_proxy;
@@ -118,7 +118,7 @@
00123 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
00124 <span class="preprocessor"></span>
00125
-00128 task_group_context *context;
+00128 <a class="code" href="a00262.html">task_group_context</a> *context;
00129 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00130
00132
@@ -127,10 +127,10 @@
00140 scheduler* owner;
00141
00143
-00146 <a class="code" href="a00228.html">tbb::task</a>* parent;
+00146 <a class="code" href="a00261.html">tbb::task</a>* parent;
00147
00149
-00153 <a class="code" href="a00279.html#a11">reference_count</a> ref_count;
+00153 <a class="code" href="a00319.html#a10">reference_count</a> ref_count;
00154
00156 <span class="keywordtype">int</span> depth;
00157
@@ -140,11 +140,11 @@
00163
00167 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> extra_state;
00168
-00169 <a class="code" href="a00279.html#a12">affinity_id</a> affinity;
+00169 <a class="code" href="a00319.html#a11">affinity_id</a> affinity;
00170
-00172 <a class="code" href="a00228.html">tbb::task</a>* next;
+00172 <a class="code" href="a00261.html">tbb::task</a>* next;
00173
-00175 <a class="code" href="a00228.html">tbb::task</a>& <a class="code" href="a00228.html">task</a>() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
+00175 <a class="code" href="a00261.html">tbb::task</a>& <a class="code" href="a00261.html">task</a>() {<span class="keywordflow">return</span> *reinterpret_cast<tbb::task*>(<span class="keyword">this</span>+1);}
00176 };
00177
00178 } <span class="comment">// namespace internal</span>
@@ -153,7 +153,7 @@
00182 <span class="preprocessor"></span>
00183
00185
-00200 <span class="keyword">class </span>task_group_context : internal::no_copy
+<a name="l00200"></a><a class="code" href="a00262.html">00200</a> <span class="keyword">class </span><a class="code" href="a00262.html">task_group_context</a> : internal::no_copy
00201 {
00202 <span class="keyword">public</span>:
00203 <span class="keyword">enum</span> kind_type {
@@ -167,7 +167,7 @@
00212 uintptr_t _my_kind_aligner;
00213 };
00214
-00216 task_group_context *my_parent;
+00216 <a class="code" href="a00262.html">task_group_context</a> *my_parent;
00217
00219
00221 internal::context_list_node_t my_node;
@@ -180,7 +180,7 @@
00233
00236 uintptr_t my_version;
00237
-00239 tbb_exception *my_exception;
+00239 <a class="code" href="a00268.html">tbb_exception</a> *my_exception;
00240
00242
00245 <span class="keywordtype">void</span> *my_owner;
@@ -192,29 +192,29 @@
00252
00253
00255
-00272 task_group_context ( kind_type relation_with_parent = bound )
+<a name="l00272"></a><a class="code" href="a00262.html#a0">00272</a> <a class="code" href="a00262.html">task_group_context</a> ( kind_type relation_with_parent = bound )
00273 : my_kind(relation_with_parent)
00274 , my_version(0)
00275 {
00276 init();
00277 }
00278
-00279 ~task_group_context ();
+00279 __TBB_EXPORTED_METHOD ~<a class="code" href="a00262.html">task_group_context</a> ();
00280
00282
-00289 <span class="keywordtype">void</span> reset ();
+00289 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD reset ();
00290
00292
-00299 <span class="keywordtype">bool</span> cancel_group_execution ();
+00299 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD cancel_group_execution ();
00300
-00302 <span class="keywordtype">bool</span> is_group_execution_cancelled () <span class="keyword">const</span>;
+00302 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_group_execution_cancelled () <span class="keyword">const</span>;
00303
00304 <span class="keyword">protected</span>:
00306
-00307 <span class="keywordtype">void</span> init ();
+00307 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD init ();
00308
00309 <span class="keyword">private</span>:
-00310 <span class="keyword">friend</span> <span class="keyword">class </span>task;
+00310 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00261.html">task</a>;
00311 <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_with_context_proxy;
00312
00313 <span class="keyword">static</span> <span class="keyword">const</span> kind_type binding_required = bound;
@@ -226,18 +226,18 @@
00321 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00322
00324
-<a name="l00325"></a><a class="code" href="a00228.html">00325</a> <span class="keyword">class </span><a class="code" href="a00228.html">task</a>: internal::no_copy {
-00327 <span class="keywordtype">void</span> internal_set_ref_count( <span class="keywordtype">int</span> count );
+<a name="l00325"></a><a class="code" href="a00261.html">00325</a> <span class="keyword">class </span><a class="code" href="a00261.html">task</a>: internal::no_copy {
+00327 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_set_ref_count( <span class="keywordtype">int</span> count );
00328
00329 <span class="keyword">protected</span>:
-<a name="l00331"></a><a class="code" href="a00228.html#b0">00331</a> <a class="code" href="a00228.html">task</a>() {prefix().extra_state=1;}
+<a name="l00331"></a><a class="code" href="a00261.html#b0">00331</a> <a class="code" href="a00261.html">task</a>() {prefix().extra_state=1;}
00332
00333 <span class="keyword">public</span>:
-<a name="l00335"></a><a class="code" href="a00228.html#a0">00335</a> <span class="keyword">virtual</span> ~<a class="code" href="a00228.html">task</a>() {}
+<a name="l00335"></a><a class="code" href="a00261.html#a0">00335</a> <span class="keyword">virtual</span> ~<a class="code" href="a00261.html">task</a>() {}
00336
-00338 <span class="keyword">virtual</span> <a class="code" href="a00228.html">task</a>* execute() = 0;
+00338 <span class="keyword">virtual</span> <a class="code" href="a00261.html">task</a>* execute() = 0;
00339
-<a name="l00341"></a><a class="code" href="a00228.html#w8">00341</a> <span class="keyword">enum</span> state_type {
+<a name="l00341"></a><a class="code" href="a00261.html#w8">00341</a> <span class="keyword">enum</span> state_type {
00343 executing,
00345 reexecute,
00347 ready,
@@ -250,185 +250,185 @@
00357 <span class="comment">// Allocating tasks</span>
00358 <span class="comment">//------------------------------------------------------------------------</span>
00359
-<a name="l00361"></a><a class="code" href="a00228.html#e0">00361</a> <span class="keyword">static</span> internal::allocate_root_proxy allocate_root() {
+<a name="l00361"></a><a class="code" href="a00261.html#e0">00361</a> <span class="keyword">static</span> internal::allocate_root_proxy allocate_root() {
00362 <span class="keywordflow">return</span> internal::allocate_root_proxy();
00363 }
00364
00365 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
00366 <span class="preprocessor"></span>
-00367 <span class="keyword">static</span> internal::allocate_root_with_context_proxy allocate_root( task_group_context& ctx ) {
+<a name="l00367"></a><a class="code" href="a00261.html#e1">00367</a> <span class="keyword">static</span> internal::allocate_root_with_context_proxy allocate_root( <a class="code" href="a00262.html">task_group_context</a>& ctx ) {
00368 <span class="keywordflow">return</span> internal::allocate_root_with_context_proxy(ctx);
00369 }
00370 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00371
00373
-<a name="l00374"></a><a class="code" href="a00228.html#a2">00374</a> internal::allocate_continuation_proxy& allocate_continuation() {
+<a name="l00374"></a><a class="code" href="a00261.html#a2">00374</a> internal::allocate_continuation_proxy& allocate_continuation() {
00375 <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_continuation_proxy*>(<span class="keyword">this</span>);
00376 }
00377
-<a name="l00379"></a><a class="code" href="a00228.html#a3">00379</a> internal::allocate_child_proxy& allocate_child() {
+<a name="l00379"></a><a class="code" href="a00261.html#a3">00379</a> internal::allocate_child_proxy& allocate_child() {
00380 <span class="keywordflow">return</span> *reinterpret_cast<internal::allocate_child_proxy*>(<span class="keyword">this</span>);
00381 }
00382
00384
-<a name="l00386"></a><a class="code" href="a00228.html#a4">00386</a> internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00228.html">task</a>& t ) {
+<a name="l00386"></a><a class="code" href="a00261.html#a4">00386</a> internal::allocate_additional_child_of_proxy allocate_additional_child_of( <a class="code" href="a00261.html">task</a>& t ) {
00387 <span class="keywordflow">return</span> internal::allocate_additional_child_of_proxy(*<span class="keyword">this</span>,t);
00388 }
00389
00391
-00395 <span class="keywordtype">void</span> destroy( <a class="code" href="a00228.html">task</a>& victim );
+00395 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD destroy( <a class="code" href="a00261.html">task</a>& victim );
00396
00397 <span class="comment">//------------------------------------------------------------------------</span>
00398 <span class="comment">// Recycling of tasks</span>
00399 <span class="comment">//------------------------------------------------------------------------</span>
00400
00402
-<a name="l00408"></a><a class="code" href="a00228.html#a6">00408</a> <span class="keywordtype">void</span> recycle_as_continuation() {
+<a name="l00408"></a><a class="code" href="a00261.html#a6">00408</a> <span class="keywordtype">void</span> recycle_as_continuation() {
00409 __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
00410 prefix().state = allocated;
00411 }
00412
00414
-<a name="l00415"></a><a class="code" href="a00228.html#a7">00415</a> <span class="keywordtype">void</span> recycle_as_safe_continuation() {
+<a name="l00415"></a><a class="code" href="a00261.html#a7">00415</a> <span class="keywordtype">void</span> recycle_as_safe_continuation() {
00416 __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running?"</span> );
00417 prefix().state = recycle;
00418 }
00419
-<a name="l00421"></a><a class="code" href="a00228.html#a8">00421</a> <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00228.html">task</a>& new_parent ) {
-00422 <a class="code" href="a00230.html">internal::task_prefix</a>& p = prefix();
+<a name="l00421"></a><a class="code" href="a00261.html#a8">00421</a> <span class="keywordtype">void</span> recycle_as_child_of( <a class="code" href="a00261.html">task</a>& new_parent ) {
+00422 <a class="code" href="a00264.html">internal::task_prefix</a>& p = prefix();
00423 __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, <span class="stringliteral">"execute not running, or already recycled"</span> );
00424 __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled as a child"</span> );
-00425 __TBB_ASSERT( p.<a class="code" href="a00230.html#r2">parent</a>==NULL, <span class="stringliteral">"parent must be null"</span> );
-00426 __TBB_ASSERT( new_parent.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r5">state</a><=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
-00427 __TBB_ASSERT( new_parent.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r5">state</a>!=freed, <span class="stringliteral">"parent already freed"</span> );
-00428 p.<a class="code" href="a00230.html#r5">state</a> = allocated;
-00429 p.<a class="code" href="a00230.html#r2">parent</a> = &new_parent;
-00430 p.<a class="code" href="a00230.html#r4">depth</a> = new_parent.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r4">depth</a>+1;
+00425 __TBB_ASSERT( p.<a class="code" href="a00264.html#r3">parent</a>==NULL, <span class="stringliteral">"parent must be null"</span> );
+00426 __TBB_ASSERT( new_parent.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r6">state</a><=recycle, <span class="stringliteral">"corrupt parent's state"</span> );
+00427 __TBB_ASSERT( new_parent.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r6">state</a>!=freed, <span class="stringliteral">"parent already freed"</span> );
+00428 p.<a class="code" href="a00264.html#r6">state</a> = allocated;
+00429 p.<a class="code" href="a00264.html#r3">parent</a> = &new_parent;
+00430 p.<a class="code" href="a00264.html#r5">depth</a> = new_parent.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r5">depth</a>+1;
00431 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00432 <span class="preprocessor"></span> p.context = new_parent.<a class="code" href="a00228.html#d1">prefix</a>().context;
+00432 <span class="preprocessor"></span> p.<a class="code" href="a00264.html#r0">context</a> = new_parent.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r0">context</a>;
00433 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00434 }
00435
00437
-<a name="l00438"></a><a class="code" href="a00228.html#a9">00438</a> <span class="keywordtype">void</span> recycle_to_reexecute() {
+<a name="l00438"></a><a class="code" href="a00261.html#a9">00438</a> <span class="keywordtype">void</span> recycle_to_reexecute() {
00439 __TBB_ASSERT( prefix().state==executing, <span class="stringliteral">"execute not running, or already recycled"</span> );
00440 __TBB_ASSERT( prefix().ref_count==0, <span class="stringliteral">"no child tasks allowed when recycled for reexecution"</span> );
-00441 prefix().<a class="code" href="a00230.html#r5">state</a> = reexecute;
+00441 prefix().state = reexecute;
00442 }
00443
00445
-<a name="l00446"></a><a class="code" href="a00228.html#w0">00446</a> <span class="keyword">typedef</span> internal::intptr depth_type;
+<a name="l00446"></a><a class="code" href="a00261.html#w0">00446</a> <span class="keyword">typedef</span> internal::intptr depth_type;
00447
-<a name="l00449"></a><a class="code" href="a00228.html#a10">00449</a> depth_type depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().<a class="code" href="a00230.html#r4">depth</a>;}
+<a name="l00449"></a><a class="code" href="a00261.html#a10">00449</a> depth_type depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().depth;}
00450
00452
-<a name="l00453"></a><a class="code" href="a00228.html#a11">00453</a> <span class="keywordtype">void</span> set_depth( depth_type new_depth ) {
+<a name="l00453"></a><a class="code" href="a00261.html#a11">00453</a> <span class="keywordtype">void</span> set_depth( depth_type new_depth ) {
00454 __TBB_ASSERT( state()!=ready, <span class="stringliteral">"cannot change depth of ready task"</span> );
00455 __TBB_ASSERT( new_depth>=0, <span class="stringliteral">"depth cannot be negative"</span> );
00456 __TBB_ASSERT( new_depth==<span class="keywordtype">int</span>(new_depth), <span class="stringliteral">"integer overflow error"</span>);
-00457 prefix().<a class="code" href="a00230.html#r4">depth</a> = int(new_depth);
+00457 prefix().depth = int(new_depth);
00458 }
00459
00461
-<a name="l00462"></a><a class="code" href="a00228.html#a12">00462</a> <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> delta ) {
+<a name="l00462"></a><a class="code" href="a00261.html#a12">00462</a> <span class="keywordtype">void</span> add_to_depth( <span class="keywordtype">int</span> delta ) {
00463 __TBB_ASSERT( state()!=ready, <span class="stringliteral">"cannot change depth of ready task"</span> );
00464 __TBB_ASSERT( prefix().depth>=-delta, <span class="stringliteral">"depth cannot be negative"</span> );
-00465 prefix().<a class="code" href="a00230.html#r4">depth</a>+=delta;
+00465 prefix().depth+=delta;
00466 }
00467
00468 <span class="comment">//------------------------------------------------------------------------</span>
00469 <span class="comment">// Spawning and blocking</span>
00470 <span class="comment">//------------------------------------------------------------------------</span>
00471
-<a name="l00473"></a><a class="code" href="a00228.html#a13">00473</a> <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
-00474 <span class="preprocessor">#if TBB_DO_ASSERT</span>
+<a name="l00473"></a><a class="code" href="a00261.html#a13">00473</a> <span class="keywordtype">void</span> set_ref_count( <span class="keywordtype">int</span> count ) {
+00474 <span class="preprocessor">#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT</span>
00475 <span class="preprocessor"></span> internal_set_ref_count(count);
00476 <span class="preprocessor">#else</span>
-00477 <span class="preprocessor"></span> prefix().<a class="code" href="a00230.html#r3">ref_count</a> = count;
-00478 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00477 <span class="preprocessor"></span> prefix().ref_count = count;
+00478 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */</span>
00479 }
00480
00482
-<a name="l00486"></a><a class="code" href="a00228.html#a14">00486</a> <span class="keywordtype">void</span> spawn( <a class="code" href="a00228.html">task</a>& child ) {
+<a name="l00486"></a><a class="code" href="a00261.html#a14">00486</a> <span class="keywordtype">void</span> spawn( <a class="code" href="a00261.html">task</a>& child ) {
00487 __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
-00488 prefix().<a class="code" href="a00230.html#r1">owner</a>->spawn( child, child.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r8">next</a> );
+00488 prefix().owner->spawn( child, child.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r9">next</a> );
00489 }
00490
00492
-00493 <span class="keywordtype">void</span> spawn( <a class="code" href="a00229.html">task_list</a>& list );
+00493 <span class="keywordtype">void</span> spawn( <a class="code" href="a00263.html">task_list</a>& list );
00494
-<a name="l00496"></a><a class="code" href="a00228.html#a16">00496</a> <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00228.html">task</a>& child ) {
+<a name="l00496"></a><a class="code" href="a00261.html#a16">00496</a> <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00261.html">task</a>& child ) {
00497 __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
-00498 prefix().<a class="code" href="a00230.html#r1">owner</a>->wait_for_all( *<span class="keyword">this</span>, &child );
+00498 prefix().owner->wait_for_all( *<span class="keyword">this</span>, &child );
00499 }
00500
-00502 <span class="keywordtype">void</span> spawn_and_wait_for_all( <a class="code" href="a00229.html">task_list</a>& list );
+00502 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD spawn_and_wait_for_all( <a class="code" href="a00263.html">task_list</a>& list );
00503
00505
-<a name="l00507"></a><a class="code" href="a00228.html#e1">00507</a> <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00228.html">task</a>& root ) {
-00508 __TBB_ASSERT( root.<a class="code" href="a00228.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"root not owned by current thread"</span> );
-00509 root.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r1">owner</a>->spawn_root_and_wait( root, root.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r8">next</a> );
+<a name="l00507"></a><a class="code" href="a00261.html#e2">00507</a> <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00261.html">task</a>& root ) {
+00508 __TBB_ASSERT( root.<a class="code" href="a00261.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"root not owned by current thread"</span> );
+00509 root.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r2">owner</a>->spawn_root_and_wait( root, root.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r9">next</a> );
00510 }
00511
00513
-00515 <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00229.html">task_list</a>& root_list );
+00515 <span class="keyword">static</span> <span class="keywordtype">void</span> spawn_root_and_wait( <a class="code" href="a00263.html">task_list</a>& root_list );
00516
00518
-<a name="l00519"></a><a class="code" href="a00228.html#a18">00519</a> <span class="keywordtype">void</span> wait_for_all() {
+<a name="l00519"></a><a class="code" href="a00261.html#a18">00519</a> <span class="keywordtype">void</span> wait_for_all() {
00520 __TBB_ASSERT( is_owned_by_current_thread(), <span class="stringliteral">"'this' not owned by current thread"</span> );
-00521 prefix().<a class="code" href="a00230.html#r1">owner</a>->wait_for_all( *<span class="keyword">this</span>, NULL );
+00521 prefix().<a class="code" href="a00264.html#r2">owner</a>->wait_for_all( *<span class="keyword">this</span>, NULL );
00522 }
00523
-00525 <span class="keyword">static</span> <a class="code" href="a00228.html">task</a>& <span class="keyword">self</span>();
+00525 <span class="keyword">static</span> <a class="code" href="a00261.html">task</a>& __TBB_EXPORTED_FUNC <span class="keyword">self</span>();
00526
-<a name="l00528"></a><a class="code" href="a00228.html#a19">00528</a> <a class="code" href="a00228.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().<a class="code" href="a00230.html#r2">parent</a>;}
+<a name="l00528"></a><a class="code" href="a00261.html#a19">00528</a> <a class="code" href="a00261.html">task</a>* parent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().<a class="code" href="a00264.html#r3">parent</a>;}
00529
-<a name="l00531"></a><a class="code" href="a00228.html#a20">00531</a> <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
-00532 <a class="code" href="a00230.html">internal::task_prefix</a>& p = prefix();
-00533 <a class="code" href="a00230.html">internal::task_prefix</a>& q = parent()-><a class="code" href="a00228.html#d1">prefix</a>();
-00534 <span class="keywordflow">return</span> p.<a class="code" href="a00230.html#r1">owner</a>!=q.<a class="code" href="a00230.html#r1">owner</a>;
+<a name="l00531"></a><a class="code" href="a00261.html#a20">00531</a> <span class="keywordtype">bool</span> is_stolen_task()<span class="keyword"> const </span>{
+00532 <a class="code" href="a00264.html">internal::task_prefix</a>& p = prefix();
+00533 <a class="code" href="a00264.html">internal::task_prefix</a>& q = parent()-><a class="code" href="a00261.html#d1">prefix</a>();
+00534 <span class="keywordflow">return</span> p.<a class="code" href="a00264.html#r2">owner</a>!=q.<a class="code" href="a00264.html#r2">owner</a>;
00535 }
00536
00537 <span class="comment">//------------------------------------------------------------------------</span>
00538 <span class="comment">// Debugging</span>
00539 <span class="comment">//------------------------------------------------------------------------</span>
00540
-<a name="l00542"></a><a class="code" href="a00228.html#a21">00542</a> state_type state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> state_type(prefix().state);}
+<a name="l00542"></a><a class="code" href="a00261.html#a21">00542</a> state_type state()<span class="keyword"> const </span>{<span class="keywordflow">return</span> state_type(prefix().state);}
00543
-<a name="l00545"></a><a class="code" href="a00228.html#a22">00545</a> <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
-00546 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00547 <span class="preprocessor"></span> internal::reference_count ref_count = prefix().<a class="code" href="a00230.html#r3">ref_count</a>;
+<a name="l00545"></a><a class="code" href="a00261.html#a22">00545</a> <span class="keywordtype">int</span> ref_count()<span class="keyword"> const </span>{
+00546 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00547 <span class="preprocessor"></span> internal::reference_count ref_count = prefix().<a class="code" href="a00264.html#r4">ref_count</a>;
00548 __TBB_ASSERT( ref_count==<span class="keywordtype">int</span>(ref_count), <span class="stringliteral">"integer overflow error"</span>);
00549 <span class="preprocessor">#endif</span>
00550 <span class="preprocessor"></span> <span class="keywordflow">return</span> int(prefix().ref_count);
00551 }
00552
-00554 <span class="keywordtype">bool</span> is_owned_by_current_thread() <span class="keyword">const</span>;
+00554 <span class="keywordtype">bool</span> __TBB_EXPORTED_METHOD is_owned_by_current_thread() <span class="keyword">const</span>;
00555
00556 <span class="comment">//------------------------------------------------------------------------</span>
00557 <span class="comment">// Affinity</span>
00558 <span class="comment">//------------------------------------------------------------------------</span>
00559
00561
-<a name="l00562"></a><a class="code" href="a00228.html#w1">00562</a> <span class="keyword">typedef</span> internal::affinity_id affinity_id;
+<a name="l00562"></a><a class="code" href="a00261.html#w1">00562</a> <span class="keyword">typedef</span> internal::affinity_id affinity_id;
00563
-<a name="l00565"></a><a class="code" href="a00228.html#a24">00565</a> <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().<a class="code" href="a00230.html#r7">affinity</a> = id;}
+<a name="l00565"></a><a class="code" href="a00261.html#a24">00565</a> <span class="keywordtype">void</span> set_affinity( affinity_id <span class="keywordtype">id</span> ) {prefix().<a class="code" href="a00264.html#r8">affinity</a> = id;}
00566
-<a name="l00568"></a><a class="code" href="a00228.html#a25">00568</a> affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().<a class="code" href="a00230.html#r7">affinity</a>;}
+<a name="l00568"></a><a class="code" href="a00261.html#a25">00568</a> affinity_id affinity()<span class="keyword"> const </span>{<span class="keywordflow">return</span> prefix().<a class="code" href="a00264.html#r8">affinity</a>;}
00569
00571
-00575 <span class="keyword">virtual</span> <span class="keywordtype">void</span> note_affinity( affinity_id <span class="keywordtype">id</span> );
+00575 <span class="keyword">virtual</span> <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD note_affinity( affinity_id <span class="keywordtype">id</span> );
00576
00577 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
00578 <span class="preprocessor"></span>
00579
-00580 <span class="keywordtype">bool</span> cancel_group_execution () { <span class="keywordflow">return</span> prefix().context->cancel_group_execution(); }
+<a name="l00580"></a><a class="code" href="a00261.html#a27">00580</a> <span class="keywordtype">bool</span> cancel_group_execution () { <span class="keywordflow">return</span> prefix().<a class="code" href="a00264.html#r0">context</a>-><a class="code" href="a00262.html#a3">cancel_group_execution</a>(); }
00581
-00583 <span class="keywordtype">bool</span> is_cancelled ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context->is_group_execution_cancelled(); }
+<a name="l00583"></a><a class="code" href="a00261.html#a28">00583</a> <span class="keywordtype">bool</span> is_cancelled ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> prefix().context-><a class="code" href="a00262.html#a4">is_group_execution_cancelled</a>(); }
00584 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
00585
00586 <span class="keyword">private</span>:
-00587 <span class="keyword">friend</span> <span class="keyword">class </span>task_list;
+00587 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00263.html">task_list</a>;
00588 <span class="keyword">friend</span> <span class="keyword">class </span>internal::scheduler;
00589 <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_root_proxy;
00590 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
@@ -439,75 +439,75 @@
00595 <span class="keyword">friend</span> <span class="keyword">class </span>internal::allocate_additional_child_of_proxy;
00596
00598
-00599 internal::task_prefix& prefix( internal::version_tag* = NULL )<span class="keyword"> const </span>{
+00599 <a class="code" href="a00264.html">internal::task_prefix</a>& prefix( <a class="code" href="a00275.html">internal::version_tag</a>* = NULL )<span class="keyword"> const </span>{
00600 <span class="keywordflow">return</span> reinterpret_cast<internal::task_prefix*>(const_cast<task*>(<span class="keyword">this</span>))[-1];
00601 }
00602 }; <span class="comment">// class task</span>
00603
00605
-<a name="l00606"></a><a class="code" href="a00188.html">00606</a> <span class="keyword">class </span><a class="code" href="a00188.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00228.html">task</a> {
-00607 <span class="comment">/*override*/</span> <a class="code" href="a00228.html">task</a>* execute() {
+<a name="l00606"></a><a class="code" href="a00215.html">00606</a> <span class="keyword">class </span><a class="code" href="a00215.html">empty_task</a>: <span class="keyword">public</span> <a class="code" href="a00261.html">task</a> {
+00607 <span class="comment">/*override*/</span> <a class="code" href="a00261.html">task</a>* execute() {
00608 <span class="keywordflow">return</span> NULL;
00609 }
00610 };
00611
00613
-<a name="l00615"></a><a class="code" href="a00229.html">00615</a> <span class="keyword">class </span><a class="code" href="a00229.html">task_list</a>: internal::no_copy {
+<a name="l00615"></a><a class="code" href="a00263.html">00615</a> <span class="keyword">class </span><a class="code" href="a00263.html">task_list</a>: internal::no_copy {
00616 <span class="keyword">private</span>:
-00617 <a class="code" href="a00228.html">task</a>* first;
-00618 <a class="code" href="a00228.html">task</a>** next_ptr;
-00619 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00228.html">task</a>;
+00617 <a class="code" href="a00261.html">task</a>* first;
+00618 <a class="code" href="a00261.html">task</a>** next_ptr;
+00619 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00261.html">task</a>;
00620 <span class="keyword">public</span>:
-<a name="l00622"></a><a class="code" href="a00229.html#a0">00622</a> <a class="code" href="a00229.html">task_list</a>() : first(NULL), next_ptr(&first) {}
+<a name="l00622"></a><a class="code" href="a00263.html#a0">00622</a> <a class="code" href="a00263.html">task_list</a>() : first(NULL), next_ptr(&first) {}
00623
-<a name="l00625"></a><a class="code" href="a00229.html#a1">00625</a> ~<a class="code" href="a00229.html">task_list</a>() {}
+<a name="l00625"></a><a class="code" href="a00263.html#a1">00625</a> ~<a class="code" href="a00263.html">task_list</a>() {}
00626
-<a name="l00628"></a><a class="code" href="a00229.html#a2">00628</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
+<a name="l00628"></a><a class="code" href="a00263.html#a2">00628</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !first;}
00629
-<a name="l00631"></a><a class="code" href="a00229.html#a3">00631</a> <span class="keywordtype">void</span> push_back( <a class="code" href="a00228.html">task</a>& <a class="code" href="a00228.html">task</a> ) {
-00632 task.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r8">next</a> = NULL;
+<a name="l00631"></a><a class="code" href="a00263.html#a3">00631</a> <span class="keywordtype">void</span> push_back( <a class="code" href="a00261.html">task</a>& <a class="code" href="a00261.html">task</a> ) {
+00632 task.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r9">next</a> = NULL;
00633 *next_ptr = &task;
-00634 next_ptr = &task.<a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r8">next</a>;
+00634 next_ptr = &task.<a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r9">next</a>;
00635 }
00636
-<a name="l00638"></a><a class="code" href="a00229.html#a4">00638</a> <a class="code" href="a00228.html">task</a>& pop_front() {
+<a name="l00638"></a><a class="code" href="a00263.html#a4">00638</a> <a class="code" href="a00261.html">task</a>& pop_front() {
00639 __TBB_ASSERT( !empty(), <span class="stringliteral">"attempt to pop item from empty task_list"</span> );
-00640 <a class="code" href="a00228.html">task</a>* result = first;
-00641 first = result-><a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r8">next</a>;
+00640 <a class="code" href="a00261.html">task</a>* result = first;
+00641 first = result-><a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r9">next</a>;
00642 <span class="keywordflow">if</span>( !first ) next_ptr = &first;
00643 <span class="keywordflow">return</span> *result;
00644 }
00645
-<a name="l00647"></a><a class="code" href="a00229.html#a5">00647</a> <span class="keywordtype">void</span> clear() {
+<a name="l00647"></a><a class="code" href="a00263.html#a5">00647</a> <span class="keywordtype">void</span> clear() {
00648 first=NULL;
00649 next_ptr=&first;
00650 }
00651 };
00652
-<a name="l00653"></a><a class="code" href="a00228.html#a15">00653</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn( <a class="code" href="a00229.html">task_list</a>& list ) {
-00654 __TBB_ASSERT( <a class="code" href="a00228.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"'this' not owned by current thread"</span> );
-00655 <span class="keywordflow">if</span>( <a class="code" href="a00228.html">task</a>* t = list.<a class="code" href="a00229.html#r0">first</a> ) {
-00656 prefix().<a class="code" href="a00230.html#r1">owner</a>->spawn( *t, *list.<a class="code" href="a00229.html#r1">next_ptr</a> );
-00657 list.<a class="code" href="a00229.html#a5">clear</a>();
+<a name="l00653"></a><a class="code" href="a00261.html#a15">00653</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn( <a class="code" href="a00263.html">task_list</a>& list ) {
+00654 __TBB_ASSERT( <a class="code" href="a00261.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+00655 <span class="keywordflow">if</span>( <a class="code" href="a00261.html">task</a>* t = list.<a class="code" href="a00263.html#r0">first</a> ) {
+00656 prefix().<a class="code" href="a00264.html#r2">owner</a>->spawn( *t, *list.<a class="code" href="a00263.html#r1">next_ptr</a> );
+00657 list.<a class="code" href="a00263.html#a5">clear</a>();
00658 }
00659 }
00660
-<a name="l00661"></a><a class="code" href="a00228.html#e2">00661</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn_root_and_wait( <a class="code" href="a00229.html">task_list</a>& root_list ) {
-00662 <span class="keywordflow">if</span>( <a class="code" href="a00228.html">task</a>* t = root_list.<a class="code" href="a00229.html#r0">first</a> ) {
-00663 __TBB_ASSERT( t-><a class="code" href="a00228.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"'this' not owned by current thread"</span> );
-00664 t-><a class="code" href="a00228.html#d1">prefix</a>().<a class="code" href="a00230.html#r1">owner</a>->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00229.html#r1">next_ptr</a> );
-00665 root_list.<a class="code" href="a00229.html#a5">clear</a>();
+<a name="l00661"></a><a class="code" href="a00261.html#e3">00661</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> task::spawn_root_and_wait( <a class="code" href="a00263.html">task_list</a>& root_list ) {
+00662 <span class="keywordflow">if</span>( <a class="code" href="a00261.html">task</a>* t = root_list.<a class="code" href="a00263.html#r0">first</a> ) {
+00663 __TBB_ASSERT( t-><a class="code" href="a00261.html#a23">is_owned_by_current_thread</a>(), <span class="stringliteral">"'this' not owned by current thread"</span> );
+00664 t-><a class="code" href="a00261.html#d1">prefix</a>().<a class="code" href="a00264.html#r2">owner</a>->spawn_root_and_wait( *t, *root_list.<a class="code" href="a00263.html#r1">next_ptr</a> );
+00665 root_list.<a class="code" href="a00263.html#a5">clear</a>();
00666 }
00667 }
00668
00669 } <span class="comment">// namespace tbb</span>
00670
-00671 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_proxy& p ) {
-00672 <span class="keywordflow">return</span> &p.allocate(bytes);
+00671 <span class="keyword">inline</span> <span class="keywordtype">void</span> *operator new( size_t bytes, <span class="keyword">const</span> tbb::internal::allocate_root_proxy& ) {
+00672 <span class="keywordflow">return</span> &tbb::internal::allocate_root_proxy::allocate(bytes);
00673 }
00674
-00675 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_root_proxy& p ) {
-00676 p.free( *static_cast<tbb::task*>(task) );
+00675 <span class="keyword">inline</span> <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* task, <span class="keyword">const</span> tbb::internal::allocate_root_proxy& ) {
+00676 tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
00677 }
00678
00679 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
@@ -547,7 +547,7 @@
00713 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00308.html b/doc/html/a00350.html
similarity index 72%
rename from doc/html/a00308.html
rename to doc/html/a00350.html
index 8b9f7c9..c370bf2 100644
--- a/doc/html/a00308.html
+++ b/doc/html/a00350.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>task_scheduler_init.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -40,41 +40,43 @@
00035 } <span class="comment">// namespace internal</span>
00037 <span class="comment"></span>
00039
-<a name="l00042"></a><a class="code" href="a00231.html">00042</a> <span class="keyword">class </span><a class="code" href="a00231.html">task_scheduler_init</a>: internal::no_copy {
+<a name="l00042"></a><a class="code" href="a00265.html">00042</a> <span class="keyword">class </span><a class="code" href="a00265.html">task_scheduler_init</a>: internal::no_copy {
00044 internal::scheduler* my_scheduler;
00045 <span class="keyword">public</span>:
-00046
-<a name="l00048"></a><a class="code" href="a00231.html#s0">00048</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> automatic = -1;
+00046
+<a name="l00048"></a><a class="code" href="a00265.html#s0">00048</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> automatic = -1;
00049
-<a name="l00051"></a><a class="code" href="a00231.html#s1">00051</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> deferred = -2;
+<a name="l00051"></a><a class="code" href="a00265.html#s1">00051</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> deferred = -2;
00052
00054
-00062 <span class="keywordtype">void</span> initialize( <span class="keywordtype">int</span> number_of_threads=automatic );
+00062 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD initialize( <span class="keywordtype">int</span> number_of_threads=automatic );
00063
00065
-00066 <span class="keywordtype">void</span> initialize( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
+00066 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD initialize( <span class="keywordtype">int</span> number_of_threads, stack_size_type thread_stack_size );
00067
-00069 <span class="keywordtype">void</span> terminate();
+00069 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD terminate();
00070
-<a name="l00072"></a><a class="code" href="a00231.html#a3">00072</a> <a class="code" href="a00231.html">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL) {
+<a name="l00072"></a><a class="code" href="a00265.html#a3">00072</a> <a class="code" href="a00265.html">task_scheduler_init</a>( <span class="keywordtype">int</span> number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL) {
00073 initialize( number_of_threads, thread_stack_size );
00074 }
-00075
-<a name="l00077"></a><a class="code" href="a00231.html#a4">00077</a> ~<a class="code" href="a00231.html">task_scheduler_init</a>() {
+00075
+<a name="l00077"></a><a class="code" href="a00265.html#a4">00077</a> ~<a class="code" href="a00265.html">task_scheduler_init</a>() {
00078 <span class="keywordflow">if</span>( my_scheduler )
00079 terminate();
00080 internal::poison_pointer( my_scheduler );
00081 }
00083
-00090 <span class="keyword">static</span> <span class="keywordtype">int</span> default_num_threads ();
-00091 };
-00092
-00093 } <span class="comment">// namespace tbb</span>
-00094
-00095 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
+00090 <span class="keyword">static</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC default_num_threads ();
+00091
+<a name="l00093"></a><a class="code" href="a00265.html#a5">00093</a> <span class="keywordtype">bool</span> is_active()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> my_scheduler != NULL; }
+00094 };
+00095
+00096 } <span class="comment">// namespace tbb</span>
+00097
+00098 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_init_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00309.html b/doc/html/a00351.html
similarity index 89%
rename from doc/html/a00309.html
rename to doc/html/a00351.html
index dbdb877..f69ddb6 100644
--- a/doc/html/a00309.html
+++ b/doc/html/a00351.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>task_scheduler_observer.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -43,15 +43,15 @@
00036 observer_proxy* my_proxy;
00037 atomic<intptr> my_busy_count;
00038 <span class="keyword">public</span>:
-00040 <span class="keywordtype">void</span> observe( <span class="keywordtype">bool</span> state=<span class="keyword">true</span> );
+00040 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD observe( <span class="keywordtype">bool</span> state=<span class="keyword">true</span> );
00041
00043 <span class="keywordtype">bool</span> is_observing()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_proxy!=NULL;}
00044
00046 task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
00047
-00049 <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_entry( <span class="keywordtype">bool</span> is_worker ) {}
+00049 <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_entry( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {}
00050
-00052 <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_exit( <span class="keywordtype">bool</span> is_worker ) {}
+00052 <span class="keyword">virtual</span> <span class="keywordtype">void</span> on_scheduler_exit( <span class="keywordtype">bool</span> <span class="comment">/*is_worker*/</span> ) {}
00053
00055 <span class="keyword">virtual</span> ~task_scheduler_observer_v3() {observe(<span class="keyword">false</span>);}
00056 };
@@ -67,7 +67,7 @@
00066 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_task_scheduler_observer_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00310.html b/doc/html/a00352.html
similarity index 53%
rename from doc/html/a00310.html
rename to doc/html/a00352.html
index d827f61..065256f 100644
--- a/doc/html/a00310.html
+++ b/doc/html/a00352.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb_allocator.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -36,95 +36,97 @@
00030 <span class="keyword">namespace </span>internal {
00031
00033
-00034 <span class="keywordtype">void</span> <a class="code" href="a00279.html#a41">deallocate_via_handler_v3</a>( <span class="keywordtype">void</span> *p );
+00034 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a61">deallocate_via_handler_v3</a>( <span class="keywordtype">void</span> *p );
00035
00037
-00038 <span class="keywordtype">void</span>* <a class="code" href="a00279.html#a42">allocate_via_handler_v3</a>( size_t n );
+00038 <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a62">allocate_via_handler_v3</a>( size_t n );
00039
-00041 <span class="keywordtype">bool</span> <a class="code" href="a00279.html#a43">is_malloc_used_v3</a>();
+00041 <span class="keywordtype">bool</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a63">is_malloc_used_v3</a>();
00042 }
00044
-00046
-00051 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-<a name="l00052"></a><a class="code" href="a00232.html">00052</a> <span class="keyword">class </span><a class="code" href="a00232.html">tbb_allocator</a> {
-00053 <span class="keyword">public</span>:
-00054 <span class="keyword">typedef</span> T* pointer;
-00055 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
-00056 <span class="keyword">typedef</span> T& reference;
-00057 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
-00058 <span class="keyword">typedef</span> T value_type;
-00059 <span class="keyword">typedef</span> size_t size_type;
-00060 <span class="keyword">typedef</span> ptrdiff_t difference_type;
-00061 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-00062 <span class="keyword">typedef</span> <a class="code" href="a00232.html">tbb_allocator<U></a> other;
-00063 };
-00064
-<a name="l00066"></a><a class="code" href="a00232.html#w9">00066</a> <span class="keyword">enum</span> malloc_type {
-00067 scalable,
-00068 standard
+00045 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00046 <span class="preprocessor"></span> <span class="comment">// Workaround for erroneous "unreferenced parameter" warning in method destroy.</span>
+00047 <span class="preprocessor"> #pragma warning (push)</span>
+00048 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (disable: 4100)</span>
+00049 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00050 <span class="preprocessor"></span>
+00052
+00057 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00058"></a><a class="code" href="a00266.html">00058</a> <span class="keyword">class </span><a class="code" href="a00266.html">tbb_allocator</a> {
+00059 <span class="keyword">public</span>:
+00060 <span class="keyword">typedef</span> T* pointer;
+00061 <span class="keyword">typedef</span> <span class="keyword">const</span> T* const_pointer;
+00062 <span class="keyword">typedef</span> T& reference;
+00063 <span class="keyword">typedef</span> <span class="keyword">const</span> T& const_reference;
+00064 <span class="keyword">typedef</span> T value_type;
+00065 <span class="keyword">typedef</span> size_t size_type;
+00066 <span class="keyword">typedef</span> ptrdiff_t difference_type;
+00067 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+00068 <span class="keyword">typedef</span> <a class="code" href="a00266.html">tbb_allocator<U></a> other;
00069 };
00070
-00071 <span class="preprocessor">#if _WIN64</span>
-00072 <span class="preprocessor"></span>
-00073
-00075 <span class="keywordtype">char</span>* _Charalloc( size_type size ) {
-00076 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*)(internal::allocate_via_handler_v3( size * <span class="keyword">sizeof</span>(T)));
-00077 }
-00078 <span class="preprocessor">#endif </span><span class="comment">/* _WIN64 */</span>
-00079
-00080 tbb_allocator() throw() {}
-00081 tbb_allocator( <span class="keyword">const</span> tbb_allocator& ) throw() {}
-00082 <span class="keyword">template</span><<span class="keyword">typename</span> U> tbb_allocator(<span class="keyword">const</span> tbb_allocator<U>&) throw() {}
-00083
-00084 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00085 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
-00086
-<a name="l00088"></a><a class="code" href="a00232.html#a5">00088</a> pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
-00089 <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(T) ));
-00090 }
-00091
-<a name="l00093"></a><a class="code" href="a00232.html#a6">00093</a> <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
-00094 internal::deallocate_via_handler_v3(p);
-00095 }
-00096
-<a name="l00098"></a><a class="code" href="a00232.html#a7">00098</a> size_type max_size() const throw() {
-00099 size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (T);
-00100 <span class="keywordflow">return</span> (max > 0 ? max : 1);
-00101 }
-00102
-<a name="l00104"></a><a class="code" href="a00232.html#a8">00104</a> <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) T(value);}
+<a name="l00072"></a><a class="code" href="a00266.html#w9">00072</a> <span class="keyword">enum</span> malloc_type {
+00073 scalable,
+00074 standard
+00075 };
+00076
+00077 <a class="code" href="a00266.html">tbb_allocator</a>() throw() {}
+00078 tbb_allocator( <span class="keyword">const</span> tbb_allocator& ) throw() {}
+00079 <span class="keyword">template</span><<span class="keyword">typename</span> U> tbb_allocator(<span class="keyword">const</span> tbb_allocator<U>&) throw() {}
+00080
+00081 pointer address(reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00082 const_pointer address(const_reference x)<span class="keyword"> const </span>{<span class="keywordflow">return</span> &x;}
+00083
+<a name="l00085"></a><a class="code" href="a00266.html#a5">00085</a> pointer allocate( size_type n, <span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/*hint*/</span> = 0) {
+00086 <span class="keywordflow">return</span> pointer(internal::allocate_via_handler_v3( n * <span class="keyword">sizeof</span>(T) ));
+00087 }
+00088
+<a name="l00090"></a><a class="code" href="a00266.html#a6">00090</a> <span class="keywordtype">void</span> deallocate( pointer p, size_type ) {
+00091 internal::deallocate_via_handler_v3(p);
+00092 }
+00093
+<a name="l00095"></a><a class="code" href="a00266.html#a7">00095</a> size_type max_size() const throw() {
+00096 size_type max = static_cast<size_type>(-1) / <span class="keyword">sizeof</span> (T);
+00097 <span class="keywordflow">return</span> (max > 0 ? max : 1);
+00098 }
+00099
+<a name="l00101"></a><a class="code" href="a00266.html#a8">00101</a> <span class="keywordtype">void</span> construct( pointer p, <span class="keyword">const</span> T& value ) {<span class="keyword">new</span>(static_cast<void*>(p)) T(value);}
+00102
+<a name="l00104"></a><a class="code" href="a00266.html#a9">00104</a> <span class="keywordtype">void</span> destroy( pointer p ) {p->~T();}
00105
-<a name="l00107"></a><a class="code" href="a00232.html#a9">00107</a> <span class="keywordtype">void</span> destroy( pointer p ) {p->~T();}
-00108
-<a name="l00110"></a><a class="code" href="a00232.html#e0">00110</a> <span class="keyword">static</span> malloc_type allocator_type() {
-00111 <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
-00112 }
-00113 };
-00114
-00116
-00117 <span class="keyword">template</span><>
-<a name="l00118"></a><a class="code" href="a00233.html">00118</a> <span class="keyword">class </span><a class="code" href="a00232.html">tbb_allocator</a><void> {
-00119 <span class="keyword">public</span>:
-00120 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
-00121 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
-00122 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
-00123 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
-00124 <span class="keyword">typedef</span> <a class="code" href="a00232.html">tbb_allocator<U></a> other;
-00125 };
-00126 };
-00127
-00128 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00129 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00232.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00232.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
-00130
-00131 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
-00132 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> tbb_allocator<T>&, <span class="keyword">const</span> tbb_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
-00133
-00134 } <span class="comment">// namespace ThreadBuildingBlocks </span>
-00135
-00136 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_allocator_H */</span>
+<a name="l00107"></a><a class="code" href="a00266.html#e0">00107</a> <span class="keyword">static</span> malloc_type allocator_type() {
+00108 <span class="keywordflow">return</span> internal::is_malloc_used_v3() ? standard : scalable;
+00109 }
+00110 };
+00111
+00112 <span class="preprocessor">#if _MSC_VER && !defined(__INTEL_COMPILER)</span>
+00113 <span class="preprocessor"></span><span class="preprocessor"> #pragma warning (pop)</span>
+00114 <span class="preprocessor"></span><span class="preprocessor">#endif // warning 4100 is back</span>
+00115 <span class="preprocessor"></span>
+00117
+00118 <span class="keyword">template</span><>
+<a name="l00119"></a><a class="code" href="a00267.html">00119</a> <span class="keyword">class </span><a class="code" href="a00266.html">tbb_allocator</a><void> {
+00120 <span class="keyword">public</span>:
+00121 <span class="keyword">typedef</span> <span class="keywordtype">void</span>* pointer;
+00122 <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* const_pointer;
+00123 <span class="keyword">typedef</span> <span class="keywordtype">void</span> value_type;
+00124 <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">struct </span>rebind {
+00125 <span class="keyword">typedef</span> <a class="code" href="a00266.html">tbb_allocator<U></a> other;
+00126 };
+00127 };
+00128
+00129 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00130 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==( <span class="keyword">const</span> <a class="code" href="a00266.html">tbb_allocator<T></a>&, <span class="keyword">const</span> <a class="code" href="a00266.html">tbb_allocator<U></a>& ) {<span class="keywordflow">return</span> <span class="keyword">true</span>;}
+00131
+00132 <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U>
+00133 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=( <span class="keyword">const</span> tbb_allocator<T>&, <span class="keyword">const</span> tbb_allocator<U>& ) {<span class="keywordflow">return</span> <span class="keyword">false</span>;}
+00134
+00135 } <span class="comment">// namespace tbb </span>
+00136
+00137 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_allocator_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00311.html b/doc/html/a00353.html
similarity index 53%
rename from doc/html/a00311.html
rename to doc/html/a00353.html
index 9353281..690cca2 100644
--- a/doc/html/a00311.html
+++ b/doc/html/a00353.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb_exception.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -33,16 +33,16 @@
00026
00027 <span class="keyword">namespace </span>tbb {
00028
-<a name="l00030"></a><a class="code" href="a00168.html">00030</a> <span class="keyword">class </span><a class="code" href="a00168.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
+<a name="l00030"></a><a class="code" href="a00194.html">00030</a> <span class="keyword">class </span><a class="code" href="a00194.html">bad_last_alloc</a> : <span class="keyword">public</span> std::bad_alloc {
00031 <span class="keyword">public</span>:
00032 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> <span class="stringliteral">"bad allocation in previous or concurrent attempt"</span>; }
-00033 <span class="keyword">virtual</span> ~<a class="code" href="a00168.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
+00033 <span class="keyword">virtual</span> ~<a class="code" href="a00194.html">bad_last_alloc</a>() <span class="keywordflow">throw</span>() {}
00034 };
00035
00036 } <span class="comment">// namespace tbb</span>
00037
00038 <span class="preprocessor">#if __TBB_EXCEPTIONS</span>
-00039 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/tbb_allocator.h"</span>
+00039 <span class="preprocessor"></span><span class="preprocessor">#include "tbb_allocator.h"</span>
00040 <span class="preprocessor">#include <exception></span>
00041 <span class="preprocessor">#include <typeinfo></span>
00042 <span class="preprocessor">#include <new></span>
@@ -50,67 +50,67 @@
00044 <span class="keyword">namespace </span>tbb {
00045
00047
-00067 <span class="keyword">class </span>tbb_exception : <span class="keyword">public</span> std::exception {
+<a name="l00067"></a><a class="code" href="a00268.html">00067</a> <span class="keyword">class </span><a class="code" href="a00268.html">tbb_exception</a> : <span class="keyword">public</span> std::exception {
00068 <span class="keyword">public</span>:
00070
-00071 <span class="keyword">virtual</span> tbb_exception* move () throw() = 0;
+00071 <span class="keyword">virtual</span> <a class="code" href="a00268.html">tbb_exception</a>* move () <span class="keywordflow">throw</span>() = 0;
00072
00074
-00076 virtual <span class="keywordtype">void</span> destroy () throw() = 0;
+00076 <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroy () <span class="keywordflow">throw</span>() = 0;
00077
00079
-00083 virtual <span class="keywordtype">void</span> throw_self () = 0;
+00083 <span class="keyword">virtual</span> <span class="keywordtype">void</span> throw_self () = 0;
00084
-00086 virtual const <span class="keywordtype">char</span>* name() const throw() = 0;
+00086 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* name() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
00087
-00089 virtual const <span class="keywordtype">char</span>* what() const throw() = 0;
+00089 <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what() <span class="keyword">const</span> <span class="keywordflow">throw</span>() = 0;
00090 };
00091
00093
-00097 class captured_exception : public tbb_exception
+<a name="l00097"></a><a class="code" href="a00200.html">00097</a> <span class="keyword">class </span><a class="code" href="a00200.html">captured_exception</a> : <span class="keyword">public</span> <a class="code" href="a00268.html">tbb_exception</a>
00098 {
00099 <span class="keyword">public</span>:
-00100 captured_exception ( <span class="keyword">const</span> captured_exception& src )
-00101 : my_dynamic(false)
+00100 <a class="code" href="a00200.html">captured_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00200.html">captured_exception</a>& src )
+00101 : my_dynamic(<span class="keyword">false</span>)
00102 {
-00103 set(src.my_exception_name, src.my_exception_info);
+00103 set(src.<a class="code" href="a00200.html#r1">my_exception_name</a>, src.<a class="code" href="a00200.html#r2">my_exception_info</a>);
00104 }
00105
-00106 captured_exception ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
-00107 : my_dynamic(false)
+00106 <a class="code" href="a00200.html">captured_exception</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* info )
+00107 : my_dynamic(<span class="keyword">false</span>)
00108 {
00109 set(name, info);
00110 }
00111
-00112 ~captured_exception () throw() {
+00112 __TBB_EXPORTED_METHOD ~<a class="code" href="a00200.html">captured_exception</a> () <span class="keywordflow">throw</span>() {
00113 clear();
00114 }
00115
-00116 captured_exception& operator= ( <span class="keyword">const</span> captured_exception& src ) {
+00116 <a class="code" href="a00200.html">captured_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00200.html">captured_exception</a>& src ) {
00117 <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
00118 clear();
-00119 set(src.my_exception_name, src.my_exception_info);
+00119 set(src.<a class="code" href="a00200.html#r1">my_exception_name</a>, src.<a class="code" href="a00200.html#r2">my_exception_info</a>);
00120 }
00121 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00122 }
00123
00124 <span class="comment">/*override*/</span>
-00125 captured_exception* move () throw();
+00125 <a class="code" href="a00200.html">captured_exception</a>* move () <span class="keywordflow">throw</span>();
00126
00127 <span class="comment">/*override*/</span>
-00128 <span class="keywordtype">void</span> destroy () throw();
+00128 <span class="keywordtype">void</span> destroy () <span class="keywordflow">throw</span>();
00129
00130 <span class="comment">/*override*/</span>
-00131 <span class="keywordtype">void</span> throw_self () { <span class="keywordflow">throw</span> *<span class="keyword">this</span>; }
+<a name="l00131"></a><a class="code" href="a00200.html#a6">00131</a> <span class="keywordtype">void</span> throw_self () { <span class="keywordflow">throw</span> *<span class="keyword">this</span>; }
00132
00133 <span class="comment">/*override*/</span>
-00134 <span class="keyword">const</span> <span class="keywordtype">char</span>* name() const throw();
+00134 <span class="keyword">const</span> <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD name() const throw();
00135
00136 <span class="comment">/*override*/</span>
-00137 const <span class="keywordtype">char</span>* what() const throw();
+00137 const <span class="keywordtype">char</span>* __TBB_EXPORTED_METHOD what() const throw();
00138
00139 private:
-00141 captured_exception() {}
+00141 <a class="code" href="a00200.html">captured_exception</a>() {}
00142
00144 <span class="keyword">static</span> captured_exception* allocate ( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* info );
00145
@@ -124,65 +124,65 @@
00153
00155
00159 template<typename ExceptionData>
-00160 class movable_exception : public tbb_exception
+<a name="l00160"></a><a class="code" href="a00226.html">00160</a> class <a class="code" href="a00226.html">movable_exception</a> : public <a class="code" href="a00268.html">tbb_exception</a>
00161 {
-00162 <span class="keyword">typedef</span> movable_exception<ExceptionData> self_type;
+00162 <span class="keyword">typedef</span> <a class="code" href="a00226.html">movable_exception<ExceptionData></a> <a class="code" href="a00226.html">self_type</a>;
00163
00164 <span class="keyword">public</span>:
-00165 movable_exception ( <span class="keyword">const</span> ExceptionData& data )
+00165 <a class="code" href="a00226.html">movable_exception</a> ( <span class="keyword">const</span> ExceptionData& data )
00166 : my_exception_data(data)
-00167 , my_dynamic(false)
-00168 , my_exception_name(typeid(self_type).name())
+00167 , my_dynamic(<span class="keyword">false</span>)
+00168 , my_exception_name(<span class="keyword">typeid</span>(self_type).name())
00169 {}
00170
-00171 movable_exception ( <span class="keyword">const</span> movable_exception& src ) <span class="keywordflow">throw</span> ()
-00172 : my_exception_data(src.my_exception_data)
+00171 <a class="code" href="a00226.html">movable_exception</a> ( <span class="keyword">const</span> <a class="code" href="a00226.html">movable_exception</a>& src ) <span class="keywordflow">throw</span> ()
+00172 : my_exception_data(src.<a class="code" href="a00226.html#p0">my_exception_data</a>)
00173 , my_dynamic(<span class="keyword">false</span>)
-00174 , my_exception_name(src.my_exception_name)
+00174 , my_exception_name(src.<a class="code" href="a00226.html#r1">my_exception_name</a>)
00175 {}
00176
-00177 ~movable_exception () throw() {}
+00177 ~<a class="code" href="a00226.html">movable_exception</a> () <span class="keywordflow">throw</span>() {}
00178
-00179 <span class="keyword">const</span> movable_exception& operator= ( <span class="keyword">const</span> movable_exception& src ) {
+00179 <span class="keyword">const</span> <a class="code" href="a00226.html">movable_exception</a>& operator= ( <span class="keyword">const</span> <a class="code" href="a00226.html">movable_exception</a>& src ) {
00180 <span class="keywordflow">if</span> ( <span class="keyword">this</span> != &src ) {
-00181 my_exception_data = src.my_exception_data;
-00182 my_exception_name = src.my_exception_name;
+00181 my_exception_data = src.<a class="code" href="a00226.html#p0">my_exception_data</a>;
+00182 my_exception_name = src.<a class="code" href="a00226.html#r1">my_exception_name</a>;
00183 }
00184 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00185 }
00186
-00187 ExceptionData& data () throw() { <span class="keywordflow">return</span> my_exception_data; }
+00187 ExceptionData& data () <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> my_exception_data; }
00188
-00189 <span class="keyword">const</span> ExceptionData& data () const throw() { <span class="keywordflow">return</span> my_exception_data; }
+00189 <span class="keyword">const</span> ExceptionData& data () <span class="keyword">const</span> <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> my_exception_data; }
00190
-00191 <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* name () const throw() { <span class="keywordflow">return</span> my_exception_name; }
+<a name="l00191"></a><a class="code" href="a00226.html#a6">00191</a> <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* name () const throw() { <span class="keywordflow">return</span> my_exception_name; }
00192
-00193 <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
+<a name="l00193"></a><a class="code" href="a00226.html#a7">00193</a> <span class="comment">/*override*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* what () const throw() { <span class="keywordflow">return</span> <span class="stringliteral">"tbb::movable_exception"</span>; }
00194
00195 <span class="comment">/*override*/</span>
-00196 movable_exception* move () throw() {
-00197 <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(movable_exception));
+<a name="l00196"></a><a class="code" href="a00226.html#a8">00196</a> <a class="code" href="a00226.html">movable_exception</a>* move () throw() {
+00197 <span class="keywordtype">void</span>* e = internal::allocate_via_handler_v3(<span class="keyword">sizeof</span>(<a class="code" href="a00226.html">movable_exception</a>));
00198 <span class="keywordflow">if</span> ( e ) {
00199 <span class="keyword">new</span> (e) movable_exception(*<span class="keyword">this</span>);
-00200 ((movable_exception*)e)->my_dynamic = <span class="keyword">true</span>;
+00200 ((movable_exception*)e)-><a class="code" href="a00226.html#r0">my_dynamic</a> = <span class="keyword">true</span>;
00201 }
00202 <span class="keywordflow">return</span> (movable_exception*)e;
00203 }
00204 <span class="comment">/*override*/</span>
-00205 <span class="keywordtype">void</span> destroy () throw() {
+<a name="l00205"></a><a class="code" href="a00226.html#a9">00205</a> <span class="keywordtype">void</span> destroy () throw() {
00206 __TBB_ASSERT ( my_dynamic, <span class="stringliteral">"Method destroy can be called only on dynamically allocated movable_exceptions"</span> );
00207 <span class="keywordflow">if</span> ( my_dynamic ) {
-00208 this->~movable_exception();
+00208 this->~<a class="code" href="a00226.html">movable_exception</a>();
00209 internal::deallocate_via_handler_v3(<span class="keyword">this</span>);
00210 }
00211 }
00212 <span class="comment">/*override*/</span>
-00213 <span class="keywordtype">void</span> throw_self () {
+<a name="l00213"></a><a class="code" href="a00226.html#a10">00213</a> <span class="keywordtype">void</span> throw_self () {
00214 <span class="keywordflow">throw</span> *<span class="keyword">this</span>;
00215 }
00216
00217 <span class="keyword">protected</span>:
-00219 ExceptionData my_exception_data;
+<a name="l00219"></a><a class="code" href="a00226.html#p0">00219</a> ExceptionData my_exception_data;
00220
00221 <span class="keyword">private</span>:
00223 <span class="keywordtype">bool</span> my_dynamic;
@@ -198,7 +198,7 @@
00234 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_exception_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00312.html b/doc/html/a00354.html
similarity index 59%
rename from doc/html/a00312.html
rename to doc/html/a00354.html
index 94e12eb..42a9d64 100644
--- a/doc/html/a00312.html
+++ b/doc/html/a00354.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb_machine.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -28,7 +28,7 @@
00021 <span class="preprocessor">#ifndef __TBB_machine_H</span>
00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_machine_H</span>
00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#include "tbb/tbb_stddef.h"</span>
+00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
00025
00026 <span class="preprocessor">#if _WIN32||_WIN64</span>
00027 <span class="preprocessor"></span>
@@ -37,9 +37,9 @@
00030 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00031 <span class="preprocessor"></span>
00032 <span class="preprocessor">#if defined(_M_IX86)</span>
-00033 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/windows_ia32.h"</span>
+00033 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_ia32.h"</span>
00034 <span class="preprocessor">#elif defined(_M_AMD64) </span>
-00035 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/windows_em64t.h"</span>
+00035 <span class="preprocessor"></span><span class="preprocessor">#include "machine/windows_em64t.h"</span>
00036 <span class="preprocessor">#else</span>
00037 <span class="preprocessor"></span><span class="preprocessor">#error Unsupported platform</span>
00038 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
@@ -51,35 +51,35 @@
00044 <span class="preprocessor">#elif __linux__ || __FreeBSD__</span>
00045 <span class="preprocessor"></span>
00046 <span class="preprocessor">#if __i386__</span>
-00047 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_ia32.h"</span>
+00047 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
00048 <span class="preprocessor">#elif __x86_64__</span>
-00049 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_em64t.h"</span>
+00049 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_em64t.h"</span>
00050 <span class="preprocessor">#elif __ia64__</span>
-00051 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_itanium.h"</span>
+00051 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_itanium.h"</span>
00052 <span class="preprocessor">#endif</span>
00053 <span class="preprocessor"></span>
00054 <span class="preprocessor">#elif __APPLE__</span>
00055 <span class="preprocessor"></span>
00056 <span class="preprocessor">#if __i386__</span>
-00057 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_ia32.h"</span>
+00057 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
00058 <span class="preprocessor">#elif __x86_64__</span>
-00059 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_em64t.h"</span>
+00059 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_em64t.h"</span>
00060 <span class="preprocessor">#elif __POWERPC__</span>
-00061 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/mac_ppc.h"</span>
+00061 <span class="preprocessor"></span><span class="preprocessor">#include "machine/mac_ppc.h"</span>
00062 <span class="preprocessor">#endif</span>
00063 <span class="preprocessor"></span>
00064 <span class="preprocessor">#elif _AIX</span>
00065 <span class="preprocessor"></span>
-00066 <span class="preprocessor">#include "tbb/machine/ibm_aix51.h"</span>
+00066 <span class="preprocessor">#include "machine/ibm_aix51.h"</span>
00067
00068 <span class="preprocessor">#elif __sun || __SUNPRO_CC</span>
00069 <span class="preprocessor"></span>
00070 <span class="preprocessor">#define __asm__ asm </span>
00071 <span class="preprocessor"></span><span class="preprocessor">#define __volatile__ volatile</span>
00072 <span class="preprocessor"></span><span class="preprocessor">#if __i386 || __i386__</span>
-00073 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_ia32.h"</span>
+00073 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_ia32.h"</span>
00074 <span class="preprocessor">#elif __x86_64__</span>
-00075 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/machine/linux_em64t.h"</span>
+00075 <span class="preprocessor"></span><span class="preprocessor">#include "machine/linux_em64t.h"</span>
00076 <span class="preprocessor">#endif</span>
00077 <span class="preprocessor"></span>
00078 <span class="preprocessor">#endif</span>
@@ -107,7 +107,7 @@
00100 <span class="preprocessor">#ifdef __TBB_fence_for_release</span>
00101 <span class="preprocessor"></span> __TBB_fence_for_release();
00102 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_fence_for_release */</span>
-00103 location = value;
+00103 location = T(value);
00104 }
00105 <span class="preprocessor">#endif</span>
00106 <span class="preprocessor"></span>
@@ -121,14 +121,14 @@
00114 <span class="keyword">namespace </span>internal {
00115
00117
-<a name="l00118"></a><a class="code" href="a00166.html">00118</a> <span class="keyword">class </span><a class="code" href="a00166.html">AtomicBackoff</a> {
+<a name="l00118"></a><a class="code" href="a00192.html">00118</a> <span class="keyword">class </span><a class="code" href="a00192.html">AtomicBackoff</a> {
00120
00122 <span class="keyword">static</span> <span class="keyword">const</span> int32_t LOOPS_BEFORE_YIELD = 16;
00123 int32_t count;
00124 <span class="keyword">public</span>:
-00125 <a class="code" href="a00166.html">AtomicBackoff</a>() : count(1) {}
+00125 <a class="code" href="a00192.html">AtomicBackoff</a>() : count(1) {}
00126
-<a name="l00128"></a><a class="code" href="a00166.html#a1">00128</a> <span class="keywordtype">void</span> pause() {
+<a name="l00128"></a><a class="code" href="a00192.html#a1">00128</a> <span class="keywordtype">void</span> pause() {
00129 <span class="keywordflow">if</span>( count<=LOOPS_BEFORE_YIELD ) {
00130 __TBB_Pause(count);
00131 <span class="comment">// Pause twice as long the next time.</span>
@@ -156,405 +156,418 @@
00153 }
00154 };
00155
-00156 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-00157 <span class="keyword">inline</span> intptr_t __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> int32_t *ptr, T value, T comparand ) {
-00158 T *base = (T *)( (uintptr_t)(ptr) & ~(uintptr_t)(0x3) );
-00159 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
-00160 <span class="preprocessor"></span> <span class="keyword">const</span> uint8_t bitoffset = ( (4-S) - ( (uint8_t *)ptr - (uint8_t *)base) ) * 8;
-00161 <span class="preprocessor">#else</span>
-00162 <span class="preprocessor"></span> <span class="keyword">const</span> uint8_t bitoffset = ( (uint8_t *)ptr - (uint8_t *)base ) * 8;
-00163 <span class="preprocessor">#endif</span>
-00164 <span class="preprocessor"></span> <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8) ) - 1)<<bitoffset;
-00165 AtomicBackoff b;
-00166 uint32_t result;
-00167 <span class="keywordflow">for</span>(;;) {
-00168 result = *(<span class="keyword">volatile</span> uint32_t *)base;
-00169 uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
-00170 uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
-00171 <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
-00172 uint32_t tmp = __TBB_CompareAndSwap4( base, new_value, old_value );
-00173 <span class="keywordflow">if</span>( tmp==old_value || ((tmp^old_value)&mask)!=0 )
-00174 <span class="keywordflow">break</span>;
-00175 b.pause();
-00176 }
-00177 <span class="keywordflow">return</span> (T)((result & mask) >> bitoffset);
-00178 }
-00179
-00180 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-00181 <span class="keyword">inline</span> T __TBB_CompareAndSwapGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value, T comparand ) {
-00182 <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+00156 <span class="comment">// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.</span>
+00157 <span class="comment">// S should be either 1 or 2, for the mask calculation to work correctly.</span>
+00158 <span class="comment">// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.</span>
+00159 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+00160 <span class="keyword">inline</span> T __TBB_MaskedCompareAndSwap (<span class="keyword">volatile</span> T *ptr, T value, T comparand ) {
+00161 <span class="keyword">volatile</span> uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
+00162 <span class="preprocessor">#if __TBB_BIG_ENDIAN</span>
+00163 <span class="preprocessor"></span> <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
+00164 <span class="preprocessor">#else</span>
+00165 <span class="preprocessor"></span> <span class="keyword">const</span> uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
+00166 <span class="preprocessor">#endif</span>
+00167 <span class="preprocessor"></span> <span class="keyword">const</span> uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
+00168 AtomicBackoff b;
+00169 uint32_t result;
+00170 <span class="keywordflow">for</span>(;;) {
+00171 result = *base; <span class="comment">// reload the base value which might change during the pause</span>
+00172 uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
+00173 uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+00174 <span class="comment">// __TBB_CompareAndSwap4 presumed to have full fence. </span>
+00175 result = __TBB_CompareAndSwap4( base, new_value, old_value );
+00176 <span class="keywordflow">if</span>( result==old_value <span class="comment">// CAS succeeded</span>
+00177 || ((result^old_value)&mask)!=0 ) <span class="comment">// CAS failed and the bits of interest have changed</span>
+00178 <span class="keywordflow">break</span>;
+00179 <span class="keywordflow">else</span> <span class="comment">// CAS failed but the bits of interest left unchanged</span>
+00180 b.pause();
+00181 }
+00182 <span class="keywordflow">return</span> T((result & mask) >> bitoffset);
00183 }
00184
-00185 <span class="keyword">template</span><>
-00186 <span class="keyword">inline</span> uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint8_t value, uint8_t comparand ) {
-00187 <span class="preprocessor">#ifdef __TBB_CompareAndSwap1</span>
-00188 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
-00189 <span class="preprocessor">#else</span>
-00190 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> int32_t *)ptr,value,comparand);
-00191 <span class="preprocessor">#endif</span>
-00192 <span class="preprocessor"></span>}
-00193
-00194 <span class="keyword">template</span><>
-00195 <span class="keyword">inline</span> uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint16_t value, uint16_t comparand ) {
-00196 <span class="preprocessor">#ifdef __TBB_CompareAndSwap2</span>
-00197 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
-00198 <span class="preprocessor">#else</span>
-00199 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> int32_t *)ptr,value,comparand);
-00200 <span class="preprocessor">#endif</span>
-00201 <span class="preprocessor"></span>}
-00202
-00203 <span class="keyword">template</span><>
-00204 <span class="keyword">inline</span> uint32_t __TBB_CompareAndSwapGeneric <4,uint32_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint32_t value, uint32_t comparand ) {
-00205 <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
-00206 }
+00185 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+00186 <span class="keyword">inline</span> T __TBB_CompareAndSwapGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value, T comparand ) {
+00187 <span class="keywordflow">return</span> __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+00188 }
+00189
+00190 <span class="keyword">template</span><>
+00191 <span class="keyword">inline</span> uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint8_t value, uint8_t comparand ) {
+00192 <span class="preprocessor">#ifdef __TBB_CompareAndSwap1</span>
+00193 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_CompareAndSwap1(ptr,value,comparand);
+00194 <span class="preprocessor">#else</span>
+00195 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<1,uint8_t>((<span class="keyword">volatile</span> uint8_t *)ptr,value,comparand);
+00196 <span class="preprocessor">#endif</span>
+00197 <span class="preprocessor"></span>}
+00198
+00199 <span class="keyword">template</span><>
+00200 <span class="keyword">inline</span> uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint16_t value, uint16_t comparand ) {
+00201 <span class="preprocessor">#ifdef __TBB_CompareAndSwap2</span>
+00202 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_CompareAndSwap2(ptr,value,comparand);
+00203 <span class="preprocessor">#else</span>
+00204 <span class="preprocessor"></span> <span class="keywordflow">return</span> __TBB_MaskedCompareAndSwap<2,uint16_t>((<span class="keyword">volatile</span> uint16_t *)ptr,value,comparand);
+00205 <span class="preprocessor">#endif</span>
+00206 <span class="preprocessor"></span>}
00207
00208 <span class="keyword">template</span><>
-00209 <span class="keyword">inline</span> uint64_t __TBB_CompareAndSwapGeneric <8,uint64_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint64_t value, uint64_t comparand ) {
-00210 <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
+00209 <span class="keyword">inline</span> uint32_t __TBB_CompareAndSwapGeneric <4,uint32_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint32_t value, uint32_t comparand ) {
+00210 <span class="keywordflow">return</span> __TBB_CompareAndSwap4(ptr,value,comparand);
00211 }
00212
-00213 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-00214 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
-00215 AtomicBackoff b;
-00216 T result;
-00217 <span class="keywordflow">for</span>(;;) {
-00218 result = *reinterpret_cast<volatile T *>(ptr);
-00219 <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
-00220 <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )
-00221 <span class="keywordflow">break</span>;
-00222 b.pause();
-00223 }
-00224 <span class="keywordflow">return</span> result;
-00225 }
-00226
-00227 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
-00228 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
-00229 AtomicBackoff b;
-00230 T result;
-00231 <span class="keywordflow">for</span>(;;) {
-00232 result = *reinterpret_cast<volatile T *>(ptr);
-00233 <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
-00234 <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )
-00235 <span class="keywordflow">break</span>;
-00236 b.pause();
-00237 }
-00238 <span class="keywordflow">return</span> result;
-00239 }
-00240
-00241 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
-00242 <span class="comment">// strict as type T. Type type should have a trivial default constructor and destructor, so that</span>
-00243 <span class="comment">// arrays of that type can be declared without initializers. </span>
-00244 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
-00245 <span class="comment">// to a type bigger than T.</span>
-00246 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
-00247 <span class="comment">// strictest alignment is 16.</span>
-00248 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
-00249 <span class="preprocessor"></span>
-00250 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
-00251 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
-00252 <span class="keywordtype">int</span> member[4];
-00253 } __attribute__((aligned(16)));
-00254 <span class="preprocessor">#elif _MSC_VER</span>
-00255 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
-00256 <span class="keywordtype">int</span> member[4];
-00257 };
-00258 <span class="preprocessor">#else</span>
-00259 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
-00260 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00261 <span class="preprocessor"></span>
-00262 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
-00263 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
-00264 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
-00265 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
-00266 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
-00267
-00268 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2 </span>
-00269 <span class="preprocessor"></span>
-00270
-00272 <span class="keyword">template</span><size_t Size, <span class="keyword">typename</span> T>
-00273 <span class="keyword">struct </span>work_around_alignment_bug {
-00274 <span class="preprocessor">#if _MSC_VER</span>
-00275 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
-00276 <span class="preprocessor">#else</span>
-00277 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
-00278 <span class="preprocessor">#endif</span>
-00279 <span class="preprocessor"></span>};
-00280 <span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment></span>
-00281 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
-00282 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
-00283 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-00284 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
-00285 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00286 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
-00287
-00288 } <span class="comment">// namespace internal</span>
-00289 } <span class="comment">// namespace tbb</span>
-00290
-00291 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
-00292 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
-00293 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00294 <span class="preprocessor"></span>
-00295 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
-00296 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
-00297 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00298 <span class="preprocessor"></span>
-00299 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
-00300 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-00301 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00302 <span class="preprocessor"></span>
-00303 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
-00304 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
-00305 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00306 <span class="preprocessor"></span>
-00307 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
-00308 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
-00309 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00310 <span class="preprocessor"></span>
-00311 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
-00312 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
-00313 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00314 <span class="preprocessor"></span>
-00315 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
-00316 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
-00317 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00318 <span class="preprocessor"></span>
-00319 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
-00320 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-00321 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00322 <span class="preprocessor"></span>
-00323 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
-00324 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
-00325 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00326 <span class="preprocessor"></span>
-00327 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
-00328 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
-00329 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00330 <span class="preprocessor"></span>
-00331 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
-00332 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
-00333 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00334 <span class="preprocessor"></span>
-00335 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
-00336 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
-00337 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00338 <span class="preprocessor"></span>
-00339 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
-00340 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
-00341 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00342 <span class="preprocessor"></span>
-00343 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
-00344 <span class="preprocessor"></span>
-00345 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
-00346 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
-00347 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00348 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
-00349 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
-00350 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00351 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
-00352 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
-00353 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00354 <span class="preprocessor"></span>
-00355 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
-00356 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
-00357 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00358 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
-00359 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
-00360 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00361 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
-00362 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
-00363 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00364 <span class="preprocessor"></span>
-00365 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
-00366 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
-00367 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00368 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
-00369 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
-00370 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00371 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
-00372 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
-00373 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
-00374 <span class="preprocessor"></span>
-00375 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
-00376 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
-00377 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00378 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
-00379 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
-00380 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00381 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
-00382 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
-00383 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00384 <span class="preprocessor"></span>
-00385 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
-00386 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
-00387 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00388 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
-00389 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
-00390 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00391 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
-00392 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
-00393 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00394 <span class="preprocessor"></span>
-00395 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
-00396 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
-00397 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00398 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
-00399 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
-00400 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00401 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
-00402 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
-00403 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00404 <span class="preprocessor"></span>
-00405 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
-00406 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
-00407 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00408 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
-00409 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
-00410 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00411 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
-00412 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
-00413 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00414 <span class="preprocessor"></span>
-00415 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
-00416 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
-00417 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00418 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
-00419 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
-00420 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00421 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
-00422 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
-00423 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00424 <span class="preprocessor"></span>
-00425 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
-00426 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
-00427 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00428 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
-00429 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
-00430 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00431 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
-00432 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
-00433 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00434 <span class="preprocessor"></span>
-00435 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
-00436 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
-00437 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00438 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
-00439 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
-00440 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00441 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
-00442 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
-00443 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00444 <span class="preprocessor"></span>
-00445 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
-00446 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
-00447 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00448 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
-00449 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
-00450 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00451 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
-00452 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
-00453 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00454 <span class="preprocessor"></span>
-00455 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
-00456 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
-00457 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00458 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
-00459 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
-00460 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00461 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
-00462 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
-00463 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00464 <span class="preprocessor"></span>
-00465 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
-00466 <span class="preprocessor"></span>
-00467 <span class="comment">// Special atomic functions</span>
-00468 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
-00469 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
-00470 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00213 <span class="keyword">template</span><>
+00214 <span class="keyword">inline</span> uint64_t __TBB_CompareAndSwapGeneric <8,uint64_t> (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, uint64_t value, uint64_t comparand ) {
+00215 <span class="keywordflow">return</span> __TBB_CompareAndSwap8(ptr,value,comparand);
+00216 }
+00217
+00218 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+00219 <span class="keyword">inline</span> T __TBB_FetchAndAddGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T addend) {
+00220 AtomicBackoff b;
+00221 T result;
+00222 <span class="keywordflow">for</span>(;;) {
+00223 result = *reinterpret_cast<volatile T *>(ptr);
+00224 <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence. </span>
+00225 <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result )==result )
+00226 <span class="keywordflow">break</span>;
+00227 b.pause();
+00228 }
+00229 <span class="keywordflow">return</span> result;
+00230 }
+00231
+00232 <span class="keyword">template</span><size_t S, <span class="keyword">typename</span> T>
+00233 <span class="keyword">inline</span> T __TBB_FetchAndStoreGeneric (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, T value) {
+00234 AtomicBackoff b;
+00235 T result;
+00236 <span class="keywordflow">for</span>(;;) {
+00237 result = *reinterpret_cast<volatile T *>(ptr);
+00238 <span class="comment">// __TBB_CompareAndSwapGeneric presumed to have full fence.</span>
+00239 <span class="keywordflow">if</span>( __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, result )==result )
+00240 <span class="keywordflow">break</span>;
+00241 b.pause();
+00242 }
+00243 <span class="keywordflow">return</span> result;
+00244 }
+00245
+00246 <span class="comment">// Macro __TBB_TypeWithAlignmentAtLeastAsStrict(T) should be a type with alignment at least as </span>
+00247 <span class="comment">// strict as type T. Type type should have a trivial default constructor and destructor, so that</span>
+00248 <span class="comment">// arrays of that type can be declared without initializers. </span>
+00249 <span class="comment">// It is correct (but perhaps a waste of space) if __TBB_TypeWithAlignmentAtLeastAsStrict(T) expands</span>
+00250 <span class="comment">// to a type bigger than T.</span>
+00251 <span class="comment">// The default definition here works on machines where integers are naturally aligned and the</span>
+00252 <span class="comment">// strictest alignment is 16.</span>
+00253 <span class="preprocessor">#ifndef __TBB_TypeWithAlignmentAtLeastAsStrict</span>
+00254 <span class="preprocessor"></span>
+00255 <span class="preprocessor">#if __GNUC__ || __SUNPRO_CC</span>
+00256 <span class="preprocessor"></span><span class="keyword">struct </span>__TBB_machine_type_with_strictest_alignment {
+00257 <span class="keywordtype">int</span> member[4];
+00258 } __attribute__((aligned(16)));
+00259 <span class="preprocessor">#elif _MSC_VER</span>
+00260 <span class="preprocessor"></span>__declspec(align(16)) struct __TBB_machine_type_with_strictest_alignment {
+00261 <span class="keywordtype">int</span> member[4];
+00262 };
+00263 <span class="preprocessor">#else</span>
+00264 <span class="preprocessor"></span><span class="preprocessor">#error Must define __TBB_TypeWithAlignmentAtLeastAsStrict(T) or __TBB_machine_type_with_strictest_alignment</span>
+00265 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00266 <span class="preprocessor"></span>
+00267 <span class="keyword">template</span><size_t N> <span class="keyword">struct </span>type_with_alignment {__TBB_machine_type_with_strictest_alignment member;};
+00268 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<1> { <span class="keywordtype">char</span> member; };
+00269 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<2> { uint16_t member; };
+00270 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<4> { uint32_t member; };
+00271 <span class="keyword">template</span><> <span class="keyword">struct </span>type_with_alignment<8> { uint64_t member; };
+00272
+00273 <span class="preprocessor">#if _MSC_VER||defined(__GNUC__)&&__GNUC__==3 && __GNUC_MINOR__<=2 </span>
+00274 <span class="preprocessor"></span>
+00275
+00277 <span class="keyword">template</span><size_t Size, <span class="keyword">typename</span> T>
+<a name="l00278"></a><a class="code" href="a00279.html">00278</a> <span class="keyword">struct </span><a class="code" href="a00279.html">work_around_alignment_bug</a> {
+00279 <span class="preprocessor">#if _MSC_VER</span>
+00280 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof(T);
+00281 <span class="preprocessor">#else</span>
+00282 <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keyword">const</span> size_t alignment = __alignof__(T);
+00283 <span class="preprocessor">#endif</span>
+00284 <span class="preprocessor"></span>};
+00285 <span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<tbb::internal::work_around_alignment_bug<sizeof(T),T>::alignment></span>
+00286 <span class="preprocessor"></span><span class="preprocessor">#elif __GNUC__ || __SUNPRO_CC</span>
+00287 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) tbb::internal::type_with_alignment<__alignof__(T)></span>
+00288 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00289 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_TypeWithAlignmentAtLeastAsStrict(T) __TBB_machine_type_with_strictest_alignment</span>
+00290 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00291 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* ____TBB_TypeWithAlignmentAtLeastAsStrict */</span>
+00292
+00293 } <span class="comment">// namespace internal</span>
+00294 } <span class="comment">// namespace tbb</span>
+00295
+00296 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1</span>
+00297 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t></span>
+00298 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00299 <span class="preprocessor"></span>
+00300 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2 </span>
+00301 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t></span>
+00302 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00303 <span class="preprocessor"></span>
+00304 <span class="preprocessor">#ifndef __TBB_CompareAndSwapW</span>
+00305 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+00306 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00307 <span class="preprocessor"></span>
+00308 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1</span>
+00309 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t></span>
+00310 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00311 <span class="preprocessor"></span>
+00312 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2</span>
+00313 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t></span>
+00314 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00315 <span class="preprocessor"></span>
+00316 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4</span>
+00317 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t></span>
+00318 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00319 <span class="preprocessor"></span>
+00320 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8</span>
+00321 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t></span>
+00322 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00323 <span class="preprocessor"></span>
+00324 <span class="preprocessor">#ifndef __TBB_FetchAndAddW</span>
+00325 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+00326 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00327 <span class="preprocessor"></span>
+00328 <span class="preprocessor">#ifndef __TBB_FetchAndStore1</span>
+00329 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t></span>
+00330 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00331 <span class="preprocessor"></span>
+00332 <span class="preprocessor">#ifndef __TBB_FetchAndStore2</span>
+00333 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t></span>
+00334 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00335 <span class="preprocessor"></span>
+00336 <span class="preprocessor">#ifndef __TBB_FetchAndStore4</span>
+00337 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t></span>
+00338 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00339 <span class="preprocessor"></span>
+00340 <span class="preprocessor">#ifndef __TBB_FetchAndStore8</span>
+00341 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t></span>
+00342 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00343 <span class="preprocessor"></span>
+00344 <span class="preprocessor">#ifndef __TBB_FetchAndStoreW</span>
+00345 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t></span>
+00346 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00347 <span class="preprocessor"></span>
+00348 <span class="preprocessor">#if __TBB_DECL_FENCED_ATOMICS</span>
+00349 <span class="preprocessor"></span>
+00350 <span class="preprocessor">#ifndef __TBB_CompareAndSwap1__TBB_full_fence</span>
+00351 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1</span>
+00352 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00353 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1acquire</span>
+00354 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence</span>
+00355 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00356 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap1release</span>
+00357 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence</span>
+00358 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00359 <span class="preprocessor"></span>
+00360 <span class="preprocessor">#ifndef __TBB_CompareAndSwap2__TBB_full_fence</span>
+00361 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2</span>
+00362 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00363 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2acquire</span>
+00364 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence</span>
+00365 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00366 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap2release</span>
+00367 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence</span>
+00368 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00369 <span class="preprocessor"></span>
+00370 <span class="preprocessor">#ifndef __TBB_CompareAndSwap4__TBB_full_fence</span>
+00371 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4</span>
+00372 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00373 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4acquire</span>
+00374 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence</span>
+00375 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00376 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap4release</span>
+00377 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence</span>
+00378 <span class="preprocessor"></span><span class="preprocessor">#endif </span>
+00379 <span class="preprocessor"></span>
+00380 <span class="preprocessor">#ifndef __TBB_CompareAndSwap8__TBB_full_fence</span>
+00381 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8</span>
+00382 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00383 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8acquire</span>
+00384 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence</span>
+00385 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00386 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_CompareAndSwap8release</span>
+00387 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence</span>
+00388 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00389 <span class="preprocessor"></span>
+00390 <span class="preprocessor">#ifndef __TBB_FetchAndAdd1__TBB_full_fence</span>
+00391 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1</span>
+00392 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00393 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1acquire</span>
+00394 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence</span>
+00395 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00396 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd1release</span>
+00397 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence</span>
+00398 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00399 <span class="preprocessor"></span>
+00400 <span class="preprocessor">#ifndef __TBB_FetchAndAdd2__TBB_full_fence</span>
+00401 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2</span>
+00402 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00403 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2acquire</span>
+00404 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence</span>
+00405 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00406 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd2release</span>
+00407 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence</span>
+00408 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00409 <span class="preprocessor"></span>
+00410 <span class="preprocessor">#ifndef __TBB_FetchAndAdd4__TBB_full_fence</span>
+00411 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4</span>
+00412 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00413 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4acquire</span>
+00414 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence</span>
+00415 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00416 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd4release</span>
+00417 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence</span>
+00418 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00419 <span class="preprocessor"></span>
+00420 <span class="preprocessor">#ifndef __TBB_FetchAndAdd8__TBB_full_fence</span>
+00421 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8</span>
+00422 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00423 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8acquire</span>
+00424 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence</span>
+00425 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00426 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndAdd8release</span>
+00427 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence</span>
+00428 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00429 <span class="preprocessor"></span>
+00430 <span class="preprocessor">#ifndef __TBB_FetchAndStore1__TBB_full_fence</span>
+00431 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1</span>
+00432 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00433 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1acquire</span>
+00434 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence</span>
+00435 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00436 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore1release</span>
+00437 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence</span>
+00438 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00439 <span class="preprocessor"></span>
+00440 <span class="preprocessor">#ifndef __TBB_FetchAndStore2__TBB_full_fence</span>
+00441 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2</span>
+00442 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00443 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2acquire</span>
+00444 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence</span>
+00445 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00446 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore2release</span>
+00447 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence</span>
+00448 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00449 <span class="preprocessor"></span>
+00450 <span class="preprocessor">#ifndef __TBB_FetchAndStore4__TBB_full_fence</span>
+00451 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4</span>
+00452 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00453 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4acquire</span>
+00454 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence</span>
+00455 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00456 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore4release</span>
+00457 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence</span>
+00458 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00459 <span class="preprocessor"></span>
+00460 <span class="preprocessor">#ifndef __TBB_FetchAndStore8__TBB_full_fence</span>
+00461 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8</span>
+00462 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00463 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8acquire</span>
+00464 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence</span>
+00465 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00466 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_FetchAndStore8release</span>
+00467 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence</span>
+00468 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00469 <span class="preprocessor"></span>
+00470 <span class="preprocessor">#endif // __TBB_DECL_FENCED_ATOMICS</span>
00471 <span class="preprocessor"></span>
-00472 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
-00473 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
-00474 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00475 <span class="preprocessor"></span>
-00476 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
-00477 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
-00478 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00479 <span class="preprocessor"></span>
-00480 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
-00481 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
-00482 <span class="preprocessor">#ifndef __TBB_Store8</span>
-00483 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
-00484 <a class="code" href="a00166.html">tbb::internal::AtomicBackoff</a> b;
-00485 <span class="keywordflow">for</span>(;;) {
-00486 int64_t result = *(int64_t *)ptr;
-00487 <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
-00488 b.<a class="code" href="a00166.html#a1">pause</a>();
-00489 }
-00490 }
-00491 <span class="preprocessor">#endif</span>
-00492 <span class="preprocessor"></span>
-00493 <span class="preprocessor">#ifndef __TBB_Load8</span>
-00494 <span class="preprocessor"></span><span class="keyword">inline</span> int64_t __TBB_Load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
-00495 int64_t result = *(int64_t *)ptr;
-00496 result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
-00497 <span class="keywordflow">return</span> result;
-00498 }
-00499 <span class="preprocessor">#endif</span>
-00500 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
-00501
-00502 <span class="preprocessor">#ifndef __TBB_Log2</span>
-00503 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
-00504 <span class="keywordtype">long</span> result = -1;
-00505 <span class="keywordflow">for</span>(; x; x>>=1 ) ++result;
-00506 <span class="keywordflow">return</span> result;
-00507 }
-00508 <span class="preprocessor">#endif</span>
-00509 <span class="preprocessor"></span>
-00510 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
-00511 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicOR( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
-00512 <a class="code" href="a00166.html">tbb::internal::AtomicBackoff</a> b;
-00513 <span class="keywordflow">for</span>(;;) {
-00514 uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-00515 uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
-00516 <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-00517 b.<a class="code" href="a00166.html#a1">pause</a>();
-00518 }
-00519 }
-00520 <span class="preprocessor">#endif</span>
-00521 <span class="preprocessor"></span>
-00522 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
-00523 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicAND( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
-00524 <a class="code" href="a00166.html">tbb::internal::AtomicBackoff</a> b;
-00525 <span class="keywordflow">for</span>(;;) {
-00526 uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
-00527 uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
-00528 <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
-00529 b.<a class="code" href="a00166.html#a1">pause</a>();
-00530 }
-00531 }
-00532 <span class="preprocessor">#endif</span>
-00533 <span class="preprocessor"></span>
-00534 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
-00535 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &flag ) {
-00536 <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
-00537 }
-00538 <span class="preprocessor">#endif</span>
-00539 <span class="preprocessor"></span>
-00540 <span class="preprocessor">#ifndef __TBB_LockByte</span>
-00541 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& flag ) {
-00542 <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
-00543 <a class="code" href="a00166.html">tbb::internal::AtomicBackoff</a> b;
-00544 <span class="keywordflow">do</span> {
-00545 b.<a class="code" href="a00166.html#a1">pause</a>();
-00546 } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
-00547 }
-00548 <span class="keywordflow">return</span> 0;
-00549 }
-00550 <span class="preprocessor">#endif</span>
-00551 <span class="preprocessor"></span>
-00552 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
+00472 <span class="comment">// Special atomic functions</span>
+00473 <span class="preprocessor">#ifndef __TBB_FetchAndAddWrelease</span>
+00474 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW</span>
+00475 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00476 <span class="preprocessor"></span>
+00477 <span class="preprocessor">#ifndef __TBB_FetchAndIncrementWacquire</span>
+00478 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)</span>
+00479 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00480 <span class="preprocessor"></span>
+00481 <span class="preprocessor">#ifndef __TBB_FetchAndDecrementWrelease</span>
+00482 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))</span>
+00483 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00484 <span class="preprocessor"></span>
+00485 <span class="preprocessor">#if __TBB_WORDSIZE==4</span>
+00486 <span class="preprocessor"></span><span class="comment">// On 32-bit platforms, "atomic.h" requires definition of __TBB_Store8 and __TBB_Load8</span>
+00487 <span class="preprocessor">#ifndef __TBB_Store8</span>
+00488 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_Store8 (<span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr, int64_t value) {
+00489 <a class="code" href="a00192.html">tbb::internal::AtomicBackoff</a> b;
+00490 <span class="keywordflow">for</span>(;;) {
+00491 int64_t result = *(int64_t *)ptr;
+00492 <span class="keywordflow">if</span>( __TBB_CompareAndSwap8(ptr,value,result)==result ) <span class="keywordflow">break</span>;
+00493 b.<a class="code" href="a00192.html#a1">pause</a>();
+00494 }
+00495 }
+00496 <span class="preprocessor">#endif</span>
+00497 <span class="preprocessor"></span>
+00498 <span class="preprocessor">#ifndef __TBB_Load8</span>
+00499 <span class="preprocessor"></span><span class="keyword">inline</span> int64_t __TBB_Load8 (<span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keywordtype">void</span> *ptr) {
+00500 int64_t result = *(int64_t *)ptr;
+00501 result = __TBB_CompareAndSwap8((<span class="keyword">volatile</span> <span class="keywordtype">void</span> *)ptr,result,result);
+00502 <span class="keywordflow">return</span> result;
+00503 }
+00504 <span class="preprocessor">#endif</span>
+00505 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_WORDSIZE==4 */</span>
+00506
+00507 <span class="preprocessor">#ifndef __TBB_Log2</span>
+00508 <span class="preprocessor"></span><span class="keyword">inline</span> intptr_t __TBB_Log2( uintptr_t x ) {
+00509 <span class="keywordflow">if</span>( x==0 ) <span class="keywordflow">return</span> -1;
+00510 intptr_t result = 0;
+00511 uintptr_t tmp;
+00512 <span class="preprocessor">#if __TBB_WORDSIZE>=8</span>
+00513 <span class="preprocessor"></span> <span class="keywordflow">if</span>( (tmp = x>>32) ) { x=tmp; result += 32; }
+00514 <span class="preprocessor">#endif</span>
+00515 <span class="preprocessor"></span> <span class="keywordflow">if</span>( (tmp = x>>16) ) { x=tmp; result += 16; }
+00516 <span class="keywordflow">if</span>( (tmp = x>>8) ) { x=tmp; result += 8; }
+00517 <span class="keywordflow">if</span>( (tmp = x>>4) ) { x=tmp; result += 4; }
+00518 <span class="keywordflow">if</span>( (tmp = x>>2) ) { x=tmp; result += 2; }
+00519 <span class="keywordflow">return</span> (x&2)? result+1: result;
+00520 }
+00521 <span class="preprocessor">#endif</span>
+00522 <span class="preprocessor"></span>
+00523 <span class="preprocessor">#ifndef __TBB_AtomicOR</span>
+00524 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicOR( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
+00525 <a class="code" href="a00192.html">tbb::internal::AtomicBackoff</a> b;
+00526 <span class="keywordflow">for</span>(;;) {
+00527 uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+00528 uintptr_t result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+00529 <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+00530 b.<a class="code" href="a00192.html#a1">pause</a>();
+00531 }
+00532 }
+00533 <span class="preprocessor">#endif</span>
+00534 <span class="preprocessor"></span>
+00535 <span class="preprocessor">#ifndef __TBB_AtomicAND</span>
+00536 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">void</span> __TBB_AtomicAND( <span class="keyword">volatile</span> <span class="keywordtype">void</span> *operand, uintptr_t addend ) {
+00537 <a class="code" href="a00192.html">tbb::internal::AtomicBackoff</a> b;
+00538 <span class="keywordflow">for</span>(;;) {
+00539 uintptr_t tmp = *(<span class="keyword">volatile</span> uintptr_t *)operand;
+00540 uintptr_t result = __TBB_CompareAndSwapW(operand, tmp&addend, tmp);
+00541 <span class="keywordflow">if</span>( result==tmp ) <span class="keywordflow">break</span>;
+00542 b.<a class="code" href="a00192.html#a1">pause</a>();
+00543 }
+00544 }
+00545 <span class="preprocessor">#endif</span>
+00546 <span class="preprocessor"></span>
+00547 <span class="preprocessor">#ifndef __TBB_TryLockByte</span>
+00548 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> __TBB_TryLockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &flag ) {
+00549 <span class="keywordflow">return</span> __TBB_CompareAndSwap1(&flag,1,0)==0;
+00550 }
+00551 <span class="preprocessor">#endif</span>
+00552 <span class="preprocessor"></span>
+00553 <span class="preprocessor">#ifndef __TBB_LockByte</span>
+00554 <span class="preprocessor"></span><span class="keyword">inline</span> uintptr_t __TBB_LockByte( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& flag ) {
+00555 <span class="keywordflow">if</span> ( !__TBB_TryLockByte(flag) ) {
+00556 <a class="code" href="a00192.html">tbb::internal::AtomicBackoff</a> b;
+00557 <span class="keywordflow">do</span> {
+00558 b.<a class="code" href="a00192.html#a1">pause</a>();
+00559 } <span class="keywordflow">while</span> ( !__TBB_TryLockByte(flag) );
+00560 }
+00561 <span class="keywordflow">return</span> 0;
+00562 }
+00563 <span class="preprocessor">#endif</span>
+00564 <span class="preprocessor"></span>
+00565 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_machine_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00355.html b/doc/html/a00355.html
new file mode 100644
index 0000000..3f9b037
--- /dev/null
+++ b/doc/html/a00355.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tbb_profiling.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tbb_profiling.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_profiling_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_profiling_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="comment">// Check if the tools support is enabled</span>
+00025 <span class="preprocessor">#if (_WIN32||_WIN64||__linux__) && TBB_USE_THREADING_TOOLS && __TBB_NAMING_API_SUPPORT</span>
+00026 <span class="preprocessor"></span>
+00027 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00028 <span class="preprocessor"></span><span class="preprocessor">#include <stdlib.h></span> <span class="comment">/* mbstowcs_s */</span>
+00029 <span class="preprocessor">#endif</span>
+00030 <span class="preprocessor"></span><span class="preprocessor">#include "tbb/tbb_stddef.h"</span>
+00031
+00032 <span class="keyword">namespace </span>tbb {
+00033 <span class="keyword">namespace </span>internal {
+00034 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00035 <span class="preprocessor"></span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* name );
+00036 <span class="keyword">inline</span> size_t multibyte_to_widechar( <span class="keywordtype">wchar_t</span>* wcs, <span class="keyword">const</span> <span class="keywordtype">char</span>* mbs, size_t bufsize) {
+00037 <span class="preprocessor">#if _MSC_VER>=1400</span>
+00038 <span class="preprocessor"></span> size_t len;
+00039 mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );
+00040 <span class="keywordflow">return</span> len; <span class="comment">// mbstowcs_s counts null terminator</span>
+00041 <span class="preprocessor">#else</span>
+00042 <span class="preprocessor"></span> size_t len = mbstowcs( wcs, mbs, bufsize );
+00043 <span class="keywordflow">if</span>(wcs && len!=size_t(-1) )
+00044 wcs[len<bufsize-1? len: bufsize-1] = wchar_t(<span class="charliteral">'\0'</span>);
+00045 <span class="keywordflow">return</span> len+1; <span class="comment">// mbstowcs does not count null terminator</span>
+00046 <span class="preprocessor">#endif</span>
+00047 <span class="preprocessor"></span> }
+00048 <span class="preprocessor">#else</span>
+00049 <span class="preprocessor"></span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC itt_set_sync_name_v3( <span class="keywordtype">void</span> *obj, <span class="keyword">const</span> <span class="keywordtype">char</span>* name );
+00050 <span class="preprocessor">#endif</span>
+00051 <span class="preprocessor"></span> } <span class="comment">// namespace internal</span>
+00052 } <span class="comment">// namespace tbb</span>
+00053
+00055
+00057 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00058 <span class="preprocessor"></span><span class="preprocessor"> #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \</span>
+00059 <span class="preprocessor"> namespace profiling { \</span>
+00060 <span class="preprocessor"> inline void set_name( sync_object_type& obj, const wchar_t* name ) { \</span>
+00061 <span class="preprocessor"> tbb::internal::itt_set_sync_name_v3( &obj, name ); \</span>
+00062 <span class="preprocessor"> } \</span>
+00063 <span class="preprocessor"> inline void set_name( sync_object_type& obj, const char* name ) { \</span>
+00064 <span class="preprocessor"> size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0); \</span>
+00065 <span class="preprocessor"> wchar_t *wname = new wchar_t[len]; \</span>
+00066 <span class="preprocessor"> tbb::internal::multibyte_to_widechar(wname, name, len); \</span>
+00067 <span class="preprocessor"> set_name( obj, wname ); \</span>
+00068 <span class="preprocessor"> delete[] wname; \</span>
+00069 <span class="preprocessor"> } \</span>
+00070 <span class="preprocessor"> }</span>
+00071 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+00072 <span class="preprocessor"> #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \</span>
+00073 <span class="preprocessor"> namespace profiling { \</span>
+00074 <span class="preprocessor"> inline void set_name( sync_object_type& obj, const char* name ) { \</span>
+00075 <span class="preprocessor"> tbb::internal::itt_set_sync_name_v3( &obj, name ); \</span>
+00076 <span class="preprocessor"> } \</span>
+00077 <span class="preprocessor"> }</span>
+00078 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+00079
+00080 <span class="preprocessor">#else </span><span class="comment">/* no tools support */</span>
+00081
+00082 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00083 <span class="preprocessor"></span><span class="preprocessor"> #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \</span>
+00084 <span class="preprocessor"> namespace profiling { \</span>
+00085 <span class="preprocessor"> inline void set_name( sync_object_type&, const wchar_t* ) {} \</span>
+00086 <span class="preprocessor"> inline void set_name( sync_object_type&, const char* ) {} \</span>
+00087 <span class="preprocessor"> }</span>
+00088 <span class="preprocessor"></span><span class="preprocessor">#else </span><span class="comment">/* !WIN */</span>
+00089 <span class="preprocessor"> #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \</span>
+00090 <span class="preprocessor"> namespace profiling { \</span>
+00091 <span class="preprocessor"> inline void set_name( sync_object_type&, const char* ) {} \</span>
+00092 <span class="preprocessor"> }</span>
+00093 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* !WIN */</span>
+00094
+00095 <span class="preprocessor">#endif </span><span class="comment">/* no tools support */</span>
+00096
+00097 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_profiling_H */</span>
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/a00313.html b/doc/html/a00356.html
similarity index 50%
rename from doc/html/a00313.html
rename to doc/html/a00356.html
index 686819d..9fe0bf7 100644
--- a/doc/html/a00313.html
+++ b/doc/html/a00356.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb_stddef.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -33,7 +33,7 @@
00026 <span class="preprocessor"></span><span class="preprocessor">#define TBB_VERSION_MINOR 1</span>
00027 <span class="preprocessor"></span>
00028 <span class="comment">// Engineering-focused interface version</span>
-00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 3011</span>
+00029 <span class="preprocessor">#define TBB_INTERFACE_VERSION 3015</span>
00030 <span class="preprocessor"></span><span class="preprocessor">#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000</span>
00031 <span class="preprocessor"></span>
00032 <span class="comment">// The oldest major interface version still supported</span>
@@ -73,7 +73,7 @@
00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00117 <span class="preprocessor"></span>
00118 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00119 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal </span>
+00119 <span class="preprocessor"></span><span class="comment">// define the parts of stdint.h that are needed, but put them inside tbb::internal</span>
00120 <span class="keyword">namespace </span>tbb {
00121 <span class="keyword">namespace </span>internal {
00122 <span class="keyword">typedef</span> __int8 int8_t;
@@ -90,106 +90,158 @@
00133 <span class="preprocessor"></span><span class="preprocessor">#include <stdint.h></span>
00134 <span class="preprocessor">#endif</span>
00135 <span class="preprocessor"></span>
-00136 <span class="preprocessor">#include <cstddef></span> <span class="comment">/* Need size_t and ptrdiff_t (the latter on Windows only) from here. */</span>
-00137
-00138 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00139 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
-00140 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
-00141 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
-00142 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00143
-00144 <span class="keyword">namespace </span>tbb {
-<a name="l00146"></a><a class="code" href="a00278.html#a6">00146</a> <span class="keyword">typedef</span> void(*assertion_handler_type)( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span> * comment );
-00147 }
-00148
-00149 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00150 <span class="preprocessor"></span>
-00152
-00155 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
-00156 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
-00157 <span class="preprocessor"></span>
-00158 <span class="keyword">namespace </span>tbb {
-00160 assertion_handler_type set_assertion_handler( assertion_handler_type new_handler );
+00136 <span class="preprocessor">#if _MSC_VER >=1400</span>
+00137 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC __cdecl</span>
+00138 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD __thiscall</span>
+00139 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00140 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_FUNC</span>
+00141 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXPORTED_METHOD</span>
+00142 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00143 <span class="preprocessor"></span>
+00144 <span class="preprocessor">#include <cstddef></span> <span class="comment">/* Need size_t and ptrdiff_t (the latter on Windows only) from here. */</span>
+00145
+00146 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00147 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tbb_windef_H</span>
+00148 <span class="preprocessor"></span><span class="preprocessor">#include "_tbb_windef.h"</span>
+00149 <span class="preprocessor">#undef __TBB_tbb_windef_H</span>
+00150 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+00151
+00152 <span class="preprocessor">#ifndef TBB_USE_DEBUG</span>
+00153 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+00154 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG TBB_DO_ASSERT</span>
+00155 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00156 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_DEBUG 0</span>
+00157 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00158 <span class="preprocessor">#else</span>
+00159 <span class="preprocessor"></span><span class="preprocessor">#define TBB_DO_ASSERT TBB_USE_DEBUG</span>
+00160 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_DEBUG */</span>
00161
-00163
-00166 <span class="keywordtype">void</span> assertion_failure( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment );
-00167 } <span class="comment">// namespace tbb</span>
-00168
-00169 <span class="preprocessor">#else</span>
-00170 <span class="preprocessor"></span>
-00172 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
-00173 <span class="preprocessor"></span>
-00174 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
-00175 <span class="preprocessor"></span>
-00176 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00162 <span class="preprocessor">#ifndef TBB_USE_ASSERT</span>
+00163 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_ASSERT</span>
+00164 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_DO_ASSERT</span>
+00165 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+00166 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_ASSERT TBB_USE_DEBUG</span>
+00167 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
+00168 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00169
+00170 <span class="preprocessor">#ifndef TBB_USE_THREADING_TOOLS</span>
+00171 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_DO_THREADING_TOOLS</span>
+00172 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS</span>
+00173 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+00174 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG</span>
+00175 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_THREADING_TOOLS */</span>
+00176 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_THREADING_TOOLS */</span>
00177
-00179 <span class="keyword">namespace </span>tbb {
-00180
-00182
-<a name="l00186"></a><a class="code" href="a00221.html">00186</a> <span class="keyword">class </span><a class="code" href="a00221.html">split</a> {
-00187 };
-00188
-00193 <span class="keyword">namespace </span>internal {
+00178 <span class="preprocessor">#ifndef TBB_USE_PERFORMANCE_WARNINGS</span>
+00179 <span class="preprocessor"></span><span class="preprocessor">#ifdef TBB_PERFORMANCE_WARNINGS</span>
+00180 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS</span>
+00181 <span class="preprocessor"></span><span class="preprocessor">#else </span>
+00182 <span class="preprocessor"></span><span class="preprocessor">#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG</span>
+00183 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PEFORMANCE_WARNINGS */</span>
+00184 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_PERFORMANCE_WARNINGS */</span>
+00185
+00186 <span class="keyword">namespace </span>tbb {
+<a name="l00188"></a><a class="code" href="a00318.html#a6">00188</a> <span class="keyword">typedef</span> void(*assertion_handler_type)( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span> * comment );
+00189 }
+00190
+00191 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00192 <span class="preprocessor"></span>
00194
-00195 <span class="keyword">using</span> std::size_t;
-00196
-00198
-<a name="l00200"></a><a class="code" href="a00279.html#a13">00200</a> <span class="keyword">typedef</span> size_t <a class="code" href="a00279.html#a13">uintptr</a>;
-00201
+00197 <span class="preprocessor">#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))</span>
+00198 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_ASSERT_EX __TBB_ASSERT</span>
+00199 <span class="preprocessor"></span>
+00200 <span class="keyword">namespace </span>tbb {
+00202 assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
00203
-<a name="l00205"></a><a class="code" href="a00279.html#a14">00205</a> <span class="keyword">typedef</span> std::ptrdiff_t intptr;
-00206
-00208 <span class="keywordtype">void</span> <a class="code" href="a00279.html#a52">runtime_warning</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
-00209
-00210 <span class="preprocessor">#if TBB_DO_ASSERT</span>
-00211 <span class="preprocessor"></span>
-00212 <span class="keyword">template</span><<span class="keyword">typename</span> T>
-00213 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* & p ) {
-00214 p = reinterpret_cast<T*>(-1);
-00215 }
-00216 <span class="preprocessor">#else</span>
-00217 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
-00218 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
-00219 <span class="preprocessor">#endif </span><span class="comment">/* TBB_DO_ASSERT */</span>
-00220
-<a name="l00222"></a><a class="code" href="a00200.html">00222</a> <span class="keyword">class </span><a class="code" href="a00200.html">no_copy</a> {
-00224 <a class="code" href="a00200.html">no_copy</a>( <span class="keyword">const</span> <a class="code" href="a00200.html">no_copy</a>& );
-00225
-00226 <span class="comment">// Deny assignment</span>
-00227 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00200.html">no_copy</a>& );
-00228 <span class="keyword">public</span>:
-<a name="l00230"></a><a class="code" href="a00200.html#a0">00230</a> <a class="code" href="a00200.html">no_copy</a>() {}
-00231 };
-00232
-00233 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
-<a name="l00236"></a><a class="code" href="a00239.html">00236</a> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="a00239.html">version_tag_v3</a> {};
+00205
+00208 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC assertion_failure( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment );
+00209 } <span class="comment">// namespace tbb</span>
+00210
+00211 <span class="preprocessor">#else</span>
+00212 <span class="preprocessor"></span>
+00214 <span class="preprocessor">#define __TBB_ASSERT(predicate,comment) ((void)0)</span>
+00215 <span class="preprocessor"></span>
+00216 <span class="preprocessor">#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))</span>
+00217 <span class="preprocessor"></span>
+00218 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00219
+00221 <span class="keyword">namespace </span>tbb {
+00222
+00224
+00228 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> <span class="keywordtype">int</span> __TBB_EXPORTED_FUNC <a class="code" href="a00318.html#a53">TBB_runtime_interface_version</a>();
+00229
+00231
+<a name="l00235"></a><a class="code" href="a00254.html">00235</a> <span class="keyword">class </span><a class="code" href="a00254.html">split</a> {
+00236 };
00237
-00238 <span class="keyword">typedef</span> <a class="code" href="a00239.html">version_tag_v3</a> <a class="code" href="a00239.html">version_tag</a>;
-00239
-00240 } <span class="comment">// internal</span>
-00242 <span class="comment"></span>
-00243 } <span class="comment">// tbb</span>
-00244
-00245 <span class="preprocessor">#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)</span>
-00246 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_EXCEPTIONS</span>
-00247 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXCEPTIONS 1</span>
-00248 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
-00249
-00250 <span class="preprocessor">#endif</span>
-00251 <span class="preprocessor"></span>
-00252 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
-00253 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
-00254 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+00242 <span class="keyword">namespace </span>internal {
+00243
+00244 <span class="keyword">using</span> std::size_t;
+00245
+00247
+<a name="l00249"></a><a class="code" href="a00319.html#a21">00249</a> <span class="keyword">typedef</span> size_t <a class="code" href="a00319.html#a21">uintptr</a>;
+00250
+00252
+<a name="l00254"></a><a class="code" href="a00319.html#a22">00254</a> <span class="keyword">typedef</span> std::ptrdiff_t intptr;
00255
-00256 <span class="preprocessor">#ifndef TBB_PERFORMANCE_WARNINGS</span>
-00257 <span class="preprocessor"></span><span class="preprocessor">#define TBB_PERFORMANCE_WARNINGS TBB_DO_ASSERT</span>
-00258 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* TBB_PERFORMANCE_WARNINGS */</span>
-00259
-00260 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
-00261 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
+00257 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a76">runtime_warning</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ... );
+00258
+00259 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00260 <span class="preprocessor"></span>
+00261 <span class="keyword">template</span><<span class="keyword">typename</span> T>
+<a name="l00262"></a><a class="code" href="a00319.html#a77">00262</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="a00319.html#a77">poison_pointer</a>( T* & p ) {
+00263 p = reinterpret_cast<T*>(-1);
+00264 }
+00265 <span class="preprocessor">#else</span>
+00266 <span class="preprocessor"></span><span class="keyword">template</span><<span class="keyword">typename</span> T>
+00267 <span class="keyword">inline</span> <span class="keywordtype">void</span> poison_pointer( T* ) {<span class="comment">/*do nothing*/</span>}
+00268 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00269
+<a name="l00271"></a><a class="code" href="a00229.html">00271</a> <span class="keyword">class </span><a class="code" href="a00229.html">no_assign</a> {
+00272 <span class="comment">// Deny assignment</span>
+00273 <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code" href="a00229.html">no_assign</a>& );
+00274 <span class="keyword">public</span>:
+00275 <span class="preprocessor">#if __GNUC__</span>
+00276 <span class="preprocessor"></span>
+<a name="l00277"></a><a class="code" href="a00229.html#a0">00277</a> <a class="code" href="a00229.html">no_assign</a>() {}
+00278 <span class="preprocessor">#endif </span><span class="comment">/* __GNUC__ */</span>
+00279 };
+00280
+<a name="l00282"></a><a class="code" href="a00230.html">00282</a> <span class="keyword">class </span><a class="code" href="a00230.html">no_copy</a>: <a class="code" href="a00229.html">no_assign</a> {
+00284 <a class="code" href="a00230.html">no_copy</a>( <span class="keyword">const</span> <a class="code" href="a00230.html">no_copy</a>& );
+00285 <span class="keyword">public</span>:
+<a name="l00287"></a><a class="code" href="a00230.html#a0">00287</a> <a class="code" href="a00230.html">no_copy</a>() {}
+00288 };
+00289
+00290 <span class="comment">// Struct to be used as a version tag for inline functions.</span>
+<a name="l00293"></a><a class="code" href="a00275.html">00293</a> <span class="comment"></span><span class="keyword">struct </span><a class="code" href="a00275.html">version_tag_v3</a> {};
+00294
+00295 <span class="keyword">typedef</span> <a class="code" href="a00275.html">version_tag_v3</a> <a class="code" href="a00275.html">version_tag</a>;
+00296
+00297 } <span class="comment">// internal</span>
+00299 <span class="comment"></span>
+00300 } <span class="comment">// tbb</span>
+00301
+00302 <span class="preprocessor">#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)</span>
+00303 <span class="preprocessor"></span><span class="preprocessor">#ifndef __TBB_EXCEPTIONS</span>
+00304 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_EXCEPTIONS 1</span>
+00305 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_EXCEPTIONS */</span>
+00306 <span class="preprocessor">#endif</span>
+00307 <span class="preprocessor"></span>
+00308 <span class="preprocessor">#ifndef __TBB_SCHEDULER_OBSERVER</span>
+00309 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_SCHEDULER_OBSERVER 1</span>
+00310 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_SCHEDULER_OBSERVER */</span>
+00311
+00312 <span class="preprocessor">#ifndef __TBB_NAMING_API_SUPPORT</span>
+00313 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_NAMING_API_SUPPORT 1</span>
+00314 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* __TBB_NAMING_API_SUPPORT */</span>
+00315
+00316
+00317 <span class="preprocessor">#endif </span><span class="comment">/* RC_INVOKED */</span>
+00318 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_stddef_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00314.html b/doc/html/a00357.html
similarity index 52%
rename from doc/html/a00314.html
rename to doc/html/a00357.html
index d5c94cd..f249694 100644
--- a/doc/html/a00314.html
+++ b/doc/html/a00357.html
@@ -4,9 +4,9 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>tbb_thread.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
-00002 <span class="comment"> Copyright 2005-2008 Intel Corporation. All Rights Reserved.</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
00003 <span class="comment"></span>
00004 <span class="comment"> The source code contained or described herein and all documents related</span>
00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
@@ -55,12 +55,12 @@
00049
00050 <span class="keyword">namespace </span>internal {
00051
-00053 <span class="keywordtype">void</span>* <a class="code" href="a00279.html#a54">allocate_closure_v3</a>( size_t size );
-00055 <span class="keywordtype">void</span> <a class="code" href="a00279.html#a55">free_closure_v3</a>( <span class="keywordtype">void</span>* );
+00053 <span class="keywordtype">void</span>* __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a79">allocate_closure_v3</a>( size_t size );
+00055 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC <a class="code" href="a00319.html#a80">free_closure_v3</a>( <span class="keywordtype">void</span>* );
00056
00057 <span class="keyword">struct </span>thread_closure_base {
-00058 <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> <a class="code" href="a00279.html#a54">allocate_closure_v3</a>(size);}
-00059 <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {<a class="code" href="a00279.html#a55">free_closure_v3</a>(ptr);}
+00058 <span class="keywordtype">void</span>* operator new( size_t size ) {<span class="keywordflow">return</span> <a class="code" href="a00319.html#a79">allocate_closure_v3</a>(size);}
+00059 <span class="keywordtype">void</span> operator delete( <span class="keywordtype">void</span>* ptr ) {<a class="code" href="a00319.html#a80">free_closure_v3</a>(ptr);}
00060 };
00061
00062 <span class="keyword">template</span><<span class="keyword">class</span> F> <span class="keyword">struct </span>thread_closure_0: thread_closure_base {
@@ -78,11 +78,11 @@
00074 }
00075 thread_closure_0( <span class="keyword">const</span> F& f ) : function(f) {}
00076 };
-<a name="l00078"></a><a class="code" href="a00235.html">00078</a> <span class="keyword">template</span><<span class="keyword">class</span> F, <span class="keyword">class</span> X> <span class="keyword">struct </span><a class="code" href="a00235.html">thread_closure_1</a>: thread_closure_base {
+<a name="l00078"></a><a class="code" href="a00271.html">00078</a> <span class="keyword">template</span><<span class="keyword">class</span> F, <span class="keyword">class</span> X> <span class="keyword">struct </span><a class="code" href="a00271.html">thread_closure_1</a>: thread_closure_base {
00079 F function;
00080 X arg1;
-<a name="l00082"></a><a class="code" href="a00235.html#e0">00082</a> <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
-00083 <a class="code" href="a00235.html">thread_closure_1</a> *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
+<a name="l00082"></a><a class="code" href="a00271.html#e0">00082</a> <span class="keyword">static</span> __TBB_NATIVE_THREAD_ROUTINE start_routine( <span class="keywordtype">void</span>* c ) {
+00083 <a class="code" href="a00271.html">thread_closure_1</a> *<span class="keyword">self</span> = static_cast<thread_closure_1*>(c);
00084 <span class="keywordflow">try</span> {
00085 <span class="keyword">self</span>->function(self->arg1);
00086 } <span class="keywordflow">catch</span> ( ... ) {
@@ -91,7 +91,7 @@
00089 <span class="keyword">delete</span> <span class="keyword">self</span>;
00090 <span class="keywordflow">return</span> 0;
00091 }
-00092 <a class="code" href="a00235.html">thread_closure_1</a>( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
+00092 <a class="code" href="a00271.html">thread_closure_1</a>( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x ) : function(f), arg1(x) {}
00093 };
00094 <span class="keyword">template</span><<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y> <span class="keyword">struct </span>thread_closure_2: thread_closure_base {
00095 F function;
@@ -110,163 +110,172 @@
00109 thread_closure_2( <span class="keyword">const</span> F& f, <span class="keyword">const</span> X& x, <span class="keyword">const</span> Y& y ) : function(f), arg1(x), arg2(y) {}
00110 };
00111
-<a name="l00113"></a><a class="code" href="a00234.html">00113</a> <span class="keyword">class </span><a class="code" href="a00234.html">tbb_thread_v3</a> {
-00114 <a class="code" href="a00234.html">tbb_thread_v3</a>& operator=(<span class="keyword">const</span> <a class="code" href="a00234.html">tbb_thread_v3</a>&); <span class="comment">// Deny access</span>
-00115 <a class="code" href="a00234.html">tbb_thread_v3</a>(<span class="keyword">const</span> <a class="code" href="a00234.html">tbb_thread_v3</a>&); <span class="comment">// = delete; // Deny access</span>
-00116 <span class="keyword">public</span>:
-00117 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00118 <span class="preprocessor"></span> <span class="keyword">typedef</span> HANDLE native_handle_type;
-00119 <span class="preprocessor">#else</span>
-00120 <span class="preprocessor"></span> <span class="keyword">typedef</span> pthread_t native_handle_type;
-00121 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-00122 <span class="preprocessor"></span>
-00123 <span class="keyword">class </span>id;
-<a name="l00125"></a><a class="code" href="a00234.html#a0">00125</a> <a class="code" href="a00234.html">tbb_thread_v3</a>() : my_handle(0)
-00126 #if _WIN32||_WIN64
-00127 , my_thread_id(0)
-00128 #endif <span class="comment">// _WIN32||_WIN64</span>
-00129 {}
-00130
-<a name="l00132"></a><a class="code" href="a00234.html#a1">00132</a> <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> <a class="code" href="a00234.html">tbb_thread_v3</a>(F f) {
-00133 <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
-00134 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
-00135 }
-<a name="l00137"></a><a class="code" href="a00234.html#a2">00137</a> <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X> <a class="code" href="a00234.html">tbb_thread_v3</a>(F f, X x) {
-00138 <span class="keyword">typedef</span> <a class="code" href="a00235.html">internal::thread_closure_1<F,X></a> closure_type;
-00139 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
-00140 }
-<a name="l00142"></a><a class="code" href="a00234.html#a3">00142</a> <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y> <a class="code" href="a00234.html">tbb_thread_v3</a>(F f, X x, Y y) {
-00143 <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
-00144 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
-00145 }
-00146
-00147 <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
-00149 <span class="keywordtype">void</span> join();
-00151 <span class="keywordtype">void</span> detach();
-00152 ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
-00153 <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
-00154 native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
-00155
-00157 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> hardware_concurrency();
-00158 <span class="keyword">private</span>:
-00159 native_handle_type my_handle;
-00160 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00161 <span class="preprocessor"></span> DWORD my_thread_id;
-00162 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-00163 <span class="preprocessor"></span>
-00165 <span class="keywordtype">void</span> internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
-00166 <span class="keywordtype">void</span>* closure );
-00167 <span class="keyword">friend</span> <span class="keywordtype">void</span> move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-00168 <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-00169 };
-00170
-00171 <span class="keyword">class </span>tbb_thread_v3::id {
-00172 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00173 <span class="preprocessor"></span> DWORD my_id;
-00174 id( DWORD my_id ) : my_id(my_id) {}
-00175 <span class="preprocessor">#else</span>
-00176 <span class="preprocessor"></span> pthread_t my_id;
-00177 id( pthread_t my_id ) : my_id(my_id) {}
-00178 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-00179 <span class="preprocessor"></span> <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
-00180 <span class="keyword">public</span>:
-00181 id() : my_id(0) {}
-00182
-00183 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00184 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00185 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00186 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00187 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00188 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
-00189
-00190 <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
-00191 <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
-00192 operator<< (std::basic_ostream<charT, traits> &out,
-00193 tbb_thread_v3::id id)
-00194 {
-00195 out << <span class="keywordtype">id</span>.my_id;
-00196 <span class="keywordflow">return</span> out;
-00197 }
-00198 <span class="keyword">friend</span> tbb_thread_v3::id thread_get_id_v3();
-00199 }; <span class="comment">// tbb_thread_v3::id</span>
-00200
-00201 tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
-00202 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00203 <span class="preprocessor"></span> <span class="keywordflow">return</span> id(my_thread_id);
-00204 <span class="preprocessor">#else</span>
-00205 <span class="preprocessor"></span> <span class="keywordflow">return</span> id(my_handle);
-00206 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
-00207 <span class="preprocessor"></span> }
-00208 <span class="keywordtype">void</span> move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
-00209 tbb_thread_v3::id thread_get_id_v3();
-00210 <span class="keywordtype">void</span> thread_yield_v3();
-00211 <span class="keywordtype">void</span> thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
-00212
-00213 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00214 {
-00215 <span class="keywordflow">return</span> x.my_id == y.my_id;
-00216 }
-00217 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00218 {
-00219 <span class="keywordflow">return</span> x.my_id != y.my_id;
-00220 }
-00221 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00222 {
-00223 <span class="keywordflow">return</span> x.my_id < y.my_id;
-00224 }
-00225 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00226 {
-00227 <span class="keywordflow">return</span> x.my_id <= y.my_id;
-00228 }
-00229 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00230 {
-00231 <span class="keywordflow">return</span> x.my_id > y.my_id;
-00232 }
-00233 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
-00234 {
-00235 <span class="keywordflow">return</span> x.my_id >= y.my_id;
-00236 }
-00237
-00238 } <span class="comment">// namespace internal;</span>
-00239
-<a name="l00241"></a><a class="code" href="a00278.html#a7">00241</a> <span class="keyword">typedef</span> <a class="code" href="a00234.html">internal::tbb_thread_v3</a> <a class="code" href="a00234.html">tbb_thread</a>;
-00242
-00243 <span class="keyword">using</span> internal::operator==;
-00244 <span class="keyword">using</span> internal::operator!=;
-00245 <span class="keyword">using</span> internal::operator<;
-00246 <span class="keyword">using</span> internal::operator>;
-00247 <span class="keyword">using</span> internal::operator<=;
-00248 <span class="keyword">using</span> internal::operator>=;
-00249
-00250 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
-00251 internal::move_v3(t1, t2);
-00252 }
-00253
-00254 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
-00255 tbb::tbb_thread::native_handle_type h = t1.my_handle;
-00256 t1.my_handle = t2.my_handle;
-00257 t2.my_handle = h;
-00258 <span class="preprocessor">#if _WIN32||_WIN64</span>
-00259 <span class="preprocessor"></span> DWORD i = t1.my_thread_id;
-00260 t1.my_thread_id = t2.my_thread_id;
-00261 t2.my_thread_id = i;
-00262 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
-00263 }
-00264
-00265 <span class="keyword">namespace </span>this_tbb_thread {
-00266 <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
-00268 <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
-00270 <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) {
-00271 internal::thread_sleep_v3(i);
-00272 }
-00273 } <span class="comment">// namespace this_tbb_thread</span>
-00274
-00275 } <span class="comment">// namespace tbb</span>
-00276
-00277 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
+<a name="l00113"></a><a class="code" href="a00270.html">00113</a> <span class="keyword">class </span><a class="code" href="a00270.html">tbb_thread_v3</a> {
+00114 <a class="code" href="a00270.html">tbb_thread_v3</a>(<span class="keyword">const</span> <a class="code" href="a00270.html">tbb_thread_v3</a>&); <span class="comment">// = delete; // Deny access</span>
+00115 <span class="keyword">public</span>:
+00116 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00117 <span class="preprocessor"></span> <span class="keyword">typedef</span> HANDLE native_handle_type;
+00118 <span class="preprocessor">#else</span>
+00119 <span class="preprocessor"></span> <span class="keyword">typedef</span> pthread_t native_handle_type;
+00120 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+00121 <span class="preprocessor"></span>
+00122 <span class="keyword">class </span>id;
+<a name="l00124"></a><a class="code" href="a00270.html#a0">00124</a> <a class="code" href="a00270.html">tbb_thread_v3</a>() : my_handle(0)
+00125 #if _WIN32||_WIN64
+00126 , my_thread_id(0)
+00127 #endif <span class="comment">// _WIN32||_WIN64</span>
+00128 {}
+00129
+<a name="l00131"></a><a class="code" href="a00270.html#a1">00131</a> <span class="keyword">template</span> <<span class="keyword">class</span> F> <span class="keyword">explicit</span> <a class="code" href="a00270.html">tbb_thread_v3</a>(F f) {
+00132 <span class="keyword">typedef</span> internal::thread_closure_0<F> closure_type;
+00133 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f));
+00134 }
+<a name="l00136"></a><a class="code" href="a00270.html#a2">00136</a> <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X> <a class="code" href="a00270.html">tbb_thread_v3</a>(F f, X x) {
+00137 <span class="keyword">typedef</span> <a class="code" href="a00271.html">internal::thread_closure_1<F,X></a> closure_type;
+00138 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x));
+00139 }
+<a name="l00141"></a><a class="code" href="a00270.html#a3">00141</a> <span class="keyword">template</span> <<span class="keyword">class</span> F, <span class="keyword">class</span> X, <span class="keyword">class</span> Y> <a class="code" href="a00270.html">tbb_thread_v3</a>(F f, X x, Y y) {
+00142 <span class="keyword">typedef</span> internal::thread_closure_2<F,X,Y> closure_type;
+00143 internal_start(closure_type::start_routine, <span class="keyword">new</span> closure_type(f,x,y));
+00144 }
+00145
+00146 <a class="code" href="a00270.html">tbb_thread_v3</a>& operator=(<a class="code" href="a00270.html">tbb_thread_v3</a>& x) {
+00147 <span class="keywordflow">if</span> (joinable()) detach();
+00148 my_handle = x.<a class="code" href="a00270.html#r0">my_handle</a>;
+00149 x.<a class="code" href="a00270.html#r0">my_handle</a> = 0;
+00150 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00151 <span class="preprocessor"></span> my_thread_id = x.<a class="code" href="a00270.html#r1">my_thread_id</a>;
+00152 x.<a class="code" href="a00270.html#r1">my_thread_id</a> = 0;
+00153 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+00154 <span class="preprocessor"></span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00155 }
+00156 <span class="keywordtype">bool</span> joinable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> my_handle!=0; }
+00158 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD join();
+00160 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD detach();
+00161 ~tbb_thread_v3() {<span class="keywordflow">if</span>( joinable() ) detach();}
+00162 <span class="keyword">inline</span> <span class="keywordtype">id</span> get_id() <span class="keyword">const</span>;
+00163 native_handle_type native_handle() { <span class="keywordflow">return</span> my_handle; }
+00164
+00166 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __TBB_EXPORTED_FUNC hardware_concurrency();
+00167 <span class="keyword">private</span>:
+00168 native_handle_type my_handle;
+00169 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00170 <span class="preprocessor"></span> DWORD my_thread_id;
+00171 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+00172 <span class="preprocessor"></span>
+00174 <span class="keywordtype">void</span> __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
+00175 <span class="keywordtype">void</span>* closure );
+00176 <span class="keyword">friend</span> <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+00177 <span class="keyword">friend</span> <span class="keywordtype">void</span> tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+00178 };
+00179
+00180 <span class="keyword">class </span>tbb_thread_v3::id {
+00181 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00182 <span class="preprocessor"></span> DWORD my_id;
+00183 id( DWORD my_id ) : my_id(my_id) {}
+00184 <span class="preprocessor">#else</span>
+00185 <span class="preprocessor"></span> pthread_t my_id;
+00186 id( pthread_t my_id ) : my_id(my_id) {}
+00187 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+00188 <span class="preprocessor"></span> <span class="keyword">friend</span> <span class="keyword">class </span>tbb_thread_v3;
+00189 <span class="keyword">public</span>:
+00190 id() : my_id(0) {}
+00191
+00192 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00193 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00194 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00195 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator<=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00196 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00197 <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator>=( tbb_thread_v3::id x, tbb_thread_v3::id y );
+00198
+00199 <span class="keyword">template</span><<span class="keyword">class</span> <span class="keywordtype">char</span>T, <span class="keyword">class</span> traits>
+00200 <span class="keyword">friend</span> std::basic_ostream<charT, traits>&
+00201 operator<< (std::basic_ostream<charT, traits> &out,
+00202 tbb_thread_v3::id id)
+00203 {
+00204 out << <span class="keywordtype">id</span>.my_id;
+00205 <span class="keywordflow">return</span> out;
+00206 }
+00207 <span class="keyword">friend</span> tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+00208 }; <span class="comment">// tbb_thread_v3::id</span>
+00209
+00210 tbb_thread_v3::id tbb_thread_v3::get_id()<span class="keyword"> const </span>{
+00211 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00212 <span class="preprocessor"></span> <span class="keywordflow">return</span> id(my_thread_id);
+00213 <span class="preprocessor">#else</span>
+00214 <span class="preprocessor"></span> <span class="keywordflow">return</span> id(my_handle);
+00215 <span class="preprocessor">#endif // _WIN32||_WIN64</span>
+00216 <span class="preprocessor"></span> }
+00217 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+00218 tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+00219 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_yield_v3();
+00220 <span class="keywordtype">void</span> __TBB_EXPORTED_FUNC thread_sleep_v3(<span class="keyword">const</span> tick_count::interval_t &i);
+00221
+00222 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00223 {
+00224 <span class="keywordflow">return</span> x.my_id == y.my_id;
+00225 }
+00226 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00227 {
+00228 <span class="keywordflow">return</span> x.my_id != y.my_id;
+00229 }
+00230 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00231 {
+00232 <span class="keywordflow">return</span> x.my_id < y.my_id;
+00233 }
+00234 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator<=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00235 {
+00236 <span class="keywordflow">return</span> x.my_id <= y.my_id;
+00237 }
+00238 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00239 {
+00240 <span class="keywordflow">return</span> x.my_id > y.my_id;
+00241 }
+00242 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator>=(tbb_thread_v3::id x, tbb_thread_v3::id y)
+00243 {
+00244 <span class="keywordflow">return</span> x.my_id >= y.my_id;
+00245 }
+00246
+00247 } <span class="comment">// namespace internal;</span>
+00248
+<a name="l00250"></a><a class="code" href="a00318.html#a7">00250</a> <span class="keyword">typedef</span> <a class="code" href="a00270.html">internal::tbb_thread_v3</a> <a class="code" href="a00270.html">tbb_thread</a>;
+00251
+00252 <span class="keyword">using</span> internal::operator==;
+00253 <span class="keyword">using</span> internal::operator!=;
+00254 <span class="keyword">using</span> internal::operator<;
+00255 <span class="keyword">using</span> internal::operator>;
+00256 <span class="keyword">using</span> internal::operator<=;
+00257 <span class="keyword">using</span> internal::operator>=;
+00258
+00259 <span class="keyword">inline</span> <span class="keywordtype">void</span> move( tbb_thread& t1, tbb_thread& t2 ) {
+00260 internal::move_v3(t1, t2);
+00261 }
+00262
+00263 <span class="keyword">inline</span> <span class="keywordtype">void</span> swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 ) {
+00264 tbb::tbb_thread::native_handle_type h = t1.<a class="code" href="a00270.html#r0">my_handle</a>;
+00265 t1.<a class="code" href="a00270.html#r0">my_handle</a> = t2.<a class="code" href="a00270.html#r0">my_handle</a>;
+00266 t2.<a class="code" href="a00270.html#r0">my_handle</a> = h;
+00267 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00268 <span class="preprocessor"></span> DWORD i = t1.<a class="code" href="a00270.html#r1">my_thread_id</a>;
+00269 t1.<a class="code" href="a00270.html#r1">my_thread_id</a> = t2.<a class="code" href="a00270.html#r1">my_thread_id</a>;
+00270 t2.<a class="code" href="a00270.html#r1">my_thread_id</a> = i;
+00271 <span class="preprocessor">#endif </span><span class="comment">/* _WIN32||_WIN64 */</span>
+00272 }
+00273
+00274 <span class="keyword">namespace </span>this_tbb_thread {
+00275 <span class="keyword">inline</span> tbb_thread::id get_id() { <span class="keywordflow">return</span> internal::thread_get_id_v3(); }
+00277 <span class="keyword">inline</span> <span class="keywordtype">void</span> yield() { internal::thread_yield_v3(); }
+00279 <span class="keyword">inline</span> <span class="keywordtype">void</span> sleep(<span class="keyword">const</span> tick_count::interval_t &i) {
+00280 internal::thread_sleep_v3(i);
+00281 }
+00282 } <span class="comment">// namespace this_tbb_thread</span>
+00283
+00284 } <span class="comment">// namespace tbb</span>
+00285
+00286 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tbb_thread_H */</span>
</pre></div><hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00358.html b/doc/html/a00358.html
new file mode 100644
index 0000000..951a5c5
--- /dev/null
+++ b/doc/html/a00358.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>tick_count.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1>tick_count.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
+00002 <span class="comment"> Copyright 2005-2009 Intel Corporation. All Rights Reserved.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment"> The source code contained or described herein and all documents related</span>
+00005 <span class="comment"> to the source code ("Material") are owned by Intel Corporation or its</span>
+00006 <span class="comment"> suppliers or licensors. Title to the Material remains with Intel</span>
+00007 <span class="comment"> Corporation or its suppliers and licensors. The Material is protected</span>
+00008 <span class="comment"> by worldwide copyright laws and treaty provisions. No part of the</span>
+00009 <span class="comment"> Material may be used, copied, reproduced, modified, published, uploaded,</span>
+00010 <span class="comment"> posted, transmitted, distributed, or disclosed in any way without</span>
+00011 <span class="comment"> Intel's prior express written permission.</span>
+00012 <span class="comment"></span>
+00013 <span class="comment"> No license under any patent, copyright, trade secret or other</span>
+00014 <span class="comment"> intellectual property right is granted to or conferred upon you by</span>
+00015 <span class="comment"> disclosure or delivery of the Materials, either expressly, by</span>
+00016 <span class="comment"> implication, inducement, estoppel or otherwise. Any license under such</span>
+00017 <span class="comment"> intellectual property rights must be express and approved by Intel in</span>
+00018 <span class="comment"> writing.</span>
+00019 <span class="comment">*/</span>
+00020
+00021 <span class="preprocessor">#ifndef __TBB_tick_count_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define __TBB_tick_count_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#include "tbb_stddef.h"</span>
+00025
+00026 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00027 <span class="preprocessor"></span><span class="preprocessor">#include <windows.h></span>
+00028 <span class="preprocessor">#elif __linux__</span>
+00029 <span class="preprocessor"></span><span class="preprocessor">#include <ctime></span>
+00030 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+00031 <span class="preprocessor">#include <sys/time.h></span>
+00032 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+00033
+00034 <span class="keyword">namespace </span>tbb {
+00035
+00037
+<a name="l00038"></a><a class="code" href="a00272.html">00038</a> <span class="keyword">class </span><a class="code" href="a00272.html">tick_count</a> {
+00039 <span class="keyword">public</span>:
+<a name="l00041"></a><a class="code" href="a00273.html">00041</a> <span class="keyword">class </span><a class="code" href="a00273.html">interval_t</a> {
+00042 <span class="keywordtype">long</span> <span class="keywordtype">long</span> value;
+00043 <span class="keyword">explicit</span> <a class="code" href="a00273.html">interval_t</a>( <span class="keywordtype">long</span> <span class="keywordtype">long</span> value_ ) : value(value_) {}
+00044 <span class="keyword">public</span>:
+<a name="l00046"></a><a class="code" href="a00273.html#a0">00046</a> <a class="code" href="a00273.html">interval_t</a>() : value(0) {};
+00047
+00049 <span class="keyword">explicit</span> <a class="code" href="a00273.html">interval_t</a>( <span class="keywordtype">double</span> sec );
+00050
+00052 <span class="keywordtype">double</span> seconds() <span class="keyword">const</span>;
+00053
+00054 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="a00272.html">tbb::tick_count</a>;
+00055
+00057 <span class="keyword">friend</span> <a class="code" href="a00273.html">interval_t</a> <a class="code" href="a00272.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t0 );
+00058
+<a name="l00060"></a><a class="code" href="a00273.html#n2">00060</a> <span class="keyword">friend</span> <a class="code" href="a00273.html">interval_t</a> operator+( <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& j ) {
+00061 <span class="keywordflow">return</span> <a class="code" href="a00273.html">interval_t</a>(i.<a class="code" href="a00273.html#r0">value</a>+j.<a class="code" href="a00273.html#r0">value</a>);
+00062 }
+00063
+<a name="l00065"></a><a class="code" href="a00273.html#n3">00065</a> <span class="keyword">friend</span> <a class="code" href="a00273.html">interval_t</a> <a class="code" href="a00272.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& i, <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& j ) {
+00066 <span class="keywordflow">return</span> <a class="code" href="a00273.html">interval_t</a>(i.<a class="code" href="a00273.html#r0">value</a>-j.<a class="code" href="a00273.html#r0">value</a>);
+00067 }
+00068
+<a name="l00070"></a><a class="code" href="a00273.html#a3">00070</a> <a class="code" href="a00273.html">interval_t</a>& operator+=( <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& i ) {value += i.<a class="code" href="a00273.html#r0">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+00071
+<a name="l00073"></a><a class="code" href="a00273.html#a4">00073</a> <a class="code" href="a00273.html">interval_t</a>& operator-=( <span class="keyword">const</span> <a class="code" href="a00273.html">interval_t</a>& i ) {value -= i.<a class="code" href="a00273.html#r0">value</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>;}
+00074 };
+00075
+<a name="l00077"></a><a class="code" href="a00272.html#a0">00077</a> <a class="code" href="a00272.html#a0">tick_count</a>() : my_count(0) {};
+00078
+00080 <span class="keyword">static</span> <a class="code" href="a00272.html">tick_count</a> <a class="code" href="a00272.html#e0">now</a>();
+00081
+00083 <span class="keyword">friend</span> interval_t <a class="code" href="a00272.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t0 );
+00084
+00085 <span class="keyword">private</span>:
+00086 <span class="keywordtype">long</span> <span class="keywordtype">long</span> my_count;
+00087 };
+00088
+<a name="l00089"></a><a class="code" href="a00272.html#e0">00089</a> <span class="keyword">inline</span> <a class="code" href="a00272.html">tick_count</a> <a class="code" href="a00272.html#e0">tick_count::now</a>() {
+00090 <a class="code" href="a00272.html">tick_count</a> result;
+00091 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00092 <span class="preprocessor"></span> LARGE_INTEGER qpcnt;
+00093 QueryPerformanceCounter(&qpcnt);
+00094 result.<a class="code" href="a00272.html#r0">my_count</a> = qpcnt.QuadPart;
+00095 <span class="preprocessor">#elif __linux__</span>
+00096 <span class="preprocessor"></span> <span class="keyword">struct </span>timespec ts;
+00097 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00098 <span class="preprocessor"></span> <span class="keywordtype">int</span> status =
+00099 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00100 clock_gettime( CLOCK_REALTIME, &ts );
+00101 __TBB_ASSERT( status==0, <span class="stringliteral">"CLOCK_REALTIME not supported"</span> );
+00102 result.<a class="code" href="a00272.html#r0">my_count</a> = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
+00103 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+00104 <span class="keyword">struct </span>timeval tv;
+00105 <span class="preprocessor">#if TBB_USE_ASSERT</span>
+00106 <span class="preprocessor"></span> <span class="keywordtype">int</span> status =
+00107 <span class="preprocessor">#endif </span><span class="comment">/* TBB_USE_ASSERT */</span>
+00108 gettimeofday(&tv, NULL);
+00109 __TBB_ASSERT( status==0, <span class="stringliteral">"gettimeofday failed"</span> );
+00110 result.<a class="code" href="a00272.html#r0">my_count</a> = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
+00111 <span class="preprocessor">#endif </span><span class="comment">/*(choice of OS) */</span>
+00112 <span class="keywordflow">return</span> result;
+00113 }
+00114
+<a name="l00115"></a><a class="code" href="a00273.html#a1">00115</a> <span class="keyword">inline</span> tick_count::interval_t::interval_t( <span class="keywordtype">double</span> sec )
+00116 {
+00117 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00118 <span class="preprocessor"></span> LARGE_INTEGER qpfreq;
+00119 QueryPerformanceFrequency(&qpfreq);
+00120 value = static_cast<long long>(sec*qpfreq.QuadPart);
+00121 <span class="preprocessor">#elif __linux__</span>
+00122 <span class="preprocessor"></span> value = static_cast<long long>(sec*1E9);
+00123 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+00124 value = static_cast<long long>(sec*1E6);
+00125 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+00126 }
+00127
+<a name="l00128"></a><a class="code" href="a00272.html#n0">00128</a> <span class="keyword">inline</span> <a class="code" href="a00273.html">tick_count::interval_t</a> <a class="code" href="a00272.html#n0">operator-</a>( <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t1, <span class="keyword">const</span> <a class="code" href="a00272.html">tick_count</a>& t0 ) {
+00129 <span class="keywordflow">return</span> <a class="code" href="a00273.html">tick_count::interval_t</a>( t1.<a class="code" href="a00272.html#r0">my_count</a>-t0.<a class="code" href="a00272.html#r0">my_count</a> );
+00130 }
+00131
+<a name="l00132"></a><a class="code" href="a00273.html#a2">00132</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> tick_count::interval_t::seconds()<span class="keyword"> const </span>{
+00133 <span class="preprocessor">#if _WIN32||_WIN64</span>
+00134 <span class="preprocessor"></span> LARGE_INTEGER qpfreq;
+00135 QueryPerformanceFrequency(&qpfreq);
+00136 <span class="keywordflow">return</span> value/(double)qpfreq.QuadPart;
+00137 <span class="preprocessor">#elif __linux__</span>
+00138 <span class="preprocessor"></span> <span class="keywordflow">return</span> value*1E-9;
+00139 <span class="preprocessor">#else </span><span class="comment">/* generic Unix */</span>
+00140 <span class="keywordflow">return</span> value*1E-6;
+00141 <span class="preprocessor">#endif </span><span class="comment">/* (choice of OS) */</span>
+00142 }
+00143
+00144 } <span class="comment">// namespace tbb</span>
+00145
+00146 <span class="preprocessor">#endif </span><span class="comment">/* __TBB_tick_count_H */</span>
+00147
+</pre></div><hr>
+<p></p>
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index 5b12c6d..97d1532 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -4,93 +4,104 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindexHL" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindexHL" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
- <tr><td class="indexkey"><a class="el" href="a00162.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a></td><td class="indexvalue">Defines entry points into tbb run-time library; </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a></td><td class="indexvalue">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00165.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00166.html">tbb::internal::AtomicBackoff</a></td><td class="indexvalue">Class that implements exponential backoff </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00167.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00168.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00169.html">tbb::blocked_range< Value ></a></td><td class="indexvalue">A range over which to iterate </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="indexvalue">A 2-dimensional range that models the Range concept </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="indexvalue">A 3-dimensional range that models the Range concept </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="indexvalue">Unordered map from Key to T </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="indexvalue">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="indexvalue">Combines data access, locking, and garbage collection </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe queue </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td class="indexvalue">Prefix on a page </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td class="indexvalue">Type-independent portion of <a class="el" href="a00180.html">concurrent_queue_iterator</a> </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a></td><td class="indexvalue">Base class of concurrent vector implementation </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td class="indexvalue">Internal structure for compact() </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00188.html">tbb::empty_task</a></td><td class="indexvalue">Task that does nothing. Useful for synchronization </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00189.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00190.html">tbb::final_scan_tag</a></td><td class="indexvalue">Used to indicate that the final scan is being performed </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a></td><td class="indexvalue">Performs final scan for a leaf </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a></td><td class="indexvalue">Task type use to combine the partial results of parallel_reduce </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td><td class="indexvalue">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a> </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a></td><td class="indexvalue">Combine partial results </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00195.html">tbb::internal::hash_map_base</a></td><td class="indexvalue">Base class of <a class="el" href="a00174.html">concurrent_hash_map</a> </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL */ </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a></td><td class="indexvalue">Range class used with <a class="el" href="a00174.html">concurrent_hash_map</a> </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00198.html">tbb::mutex</a></td><td class="indexvalue">Wrapper around the platform's native reader-writer lock </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td class="indexvalue">Base class for types that should not be copied or assigned </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a></td><td class="indexvalue">Class the user supplied algorithm body uses to add new tasks </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00204.html">tbb::parallel_while< Body ></a></td><td class="indexvalue">Parallel iteration over a stream, with optional addition of more work </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00205.html">tbb::internal::partition_type_base</a></td><td class="indexvalue">Provides default methods for partition objects without affinity </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00206.html">tbb::pipeline</a></td><td class="indexvalue">A processing pipeling that applies filters to items </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00207.html">tbb::pre_scan_tag</a></td><td class="indexvalue">Used to indicate that the initial scan is being performed </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00208.html">tbb::queuing_mutex</a></td><td class="indexvalue">Queuing lock with local-only spinning </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a></td><td class="indexvalue">Reader-writer lock with local-only spinning </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td><td class="indexvalue">Body class used to sort elements in a range that is smaller than the grainsize </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td class="indexvalue">Range used in quicksort to split elements into subranges based on a value </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00214.html">tbb::recursive_mutex</a></td><td class="indexvalue">Mutex that allows recursive mutex acquisition </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00216.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00217.html">tbb::spin_mutex</a></td><td class="indexvalue">A lock that occupies a single byte </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a></td><td class="indexvalue">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00221.html">tbb::split</a></td><td class="indexvalue">Dummy type that distinguishes splitting constructor from copy constructor </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td><td class="indexvalue">Task type used in parallel_for </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td class="indexvalue">Task type used to split the work of parallel_reduce </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td class="indexvalue">Task type used to split the work of parallel_reduce with <a class="el" href="a00162.html">affinity_partitioner</a> </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td class="indexvalue">Initial task to split the work </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00226.html">tbb::internal::strip< T ></a></td><td class="indexvalue">Strips its template type argument from 'cv' and '&' qualifiers </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a></td><td class="indexvalue">Split work to be done in the scan </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00228.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00229.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00230.html">tbb::internal::task_prefix</a></td><td class="indexvalue">Memory prefix to a task object </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00231.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class representing reference to tbb scheduler </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a></td><td class="indexvalue">Versioned thread class </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="indexvalue">Structure used to pass user function with 1 argument to thread </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00236.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00237.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00169.html">blocked_range</a>.*/ </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00239.html">tbb::internal::version_tag_v3</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a></td><td class="indexvalue">For internal use only </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00188.html">tbb::affinity_partitioner</a></td><td class="indexvalue">An affinity partitioner </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a></td><td class="indexvalue">Defines entry points into tbb run-time library; </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00190.html">tbb::aligned_space< T, N ></a></td><td class="indexvalue">Block of space aligned sufficiently to construct an array T with N elements </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00191.html">tbb::atomic< T ></a></td><td class="indexvalue">Primary template for atomic </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00192.html">tbb::internal::AtomicBackoff</a></td><td class="indexvalue">Class that implements exponential backoff </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00193.html">tbb::auto_partitioner</a></td><td class="indexvalue">An auto partitioner </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00194.html">tbb::bad_last_alloc</a></td><td class="indexvalue">Exception for concurrent containers </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00195.html">tbb::blocked_range< Value ></a></td><td class="indexvalue">A range over which to iterate </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a></td><td class="indexvalue">A 2-dimensional range that models the Range concept </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a></td><td class="indexvalue">A 3-dimensional range that models the Range concept </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00200.html">tbb::captured_exception</a></td><td class="indexvalue">This class is used by TBB to propagate information about unhandled exceptions into the root thread </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></td><td class="indexvalue">Unordered map from Key to T </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a></td><td class="indexvalue">Allows write access to elements and combines data access, locking, and garbage collection </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></td><td class="indexvalue">Combines data access, locking, and garbage collection </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a></td><td class="indexvalue">A high-performance thread-safe queue </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a></td><td class="indexvalue">Prefix on a page </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a></td><td class="indexvalue">Type-independent portion of <a class="el" href="a00207.html">concurrent_queue_iterator</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a></td><td class="indexvalue">Concurrent vector container </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a></td><td class="indexvalue">Base class of concurrent vector implementation </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a></td><td class="indexvalue">Internal structure for compact() </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00215.html">tbb::empty_task</a></td><td class="indexvalue">Task that does nothing. Useful for synchronization </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00216.html">tbb::filter</a></td><td class="indexvalue">A stage in a pipeline </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00217.html">tbb::final_scan_tag</a></td><td class="indexvalue">Used to indicate that the final scan is being performed </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a></td><td class="indexvalue">Performs final scan for a leaf </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a></td><td class="indexvalue">Task type use to combine the partial results of parallel_reduce </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a></td><td class="indexvalue">Task type use to combine the partial results of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a></td><td class="indexvalue">Combine partial results </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00222.html">tbb::internal::hash_map_base</a></td><td class="indexvalue">Base class of <a class="el" href="a00201.html">concurrent_hash_map</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL */ </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a></td><td class="indexvalue">Range class used with <a class="el" href="a00201.html">concurrent_hash_map</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a></td><td class="indexvalue">Auxiliary class for parallel_reduce; for internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a></td><td class="indexvalue">Template that can be used to implement exception that transfers arbitrary ExceptionData to the root thread </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00227.html">tbb::mutex</a></td><td class="indexvalue">Wrapper around the platform's native reader-writer lock </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00229.html">tbb::internal::no_assign</a></td><td class="indexvalue">Base class for types that should not be assigned </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00230.html">tbb::internal::no_copy</a></td><td class="indexvalue">Base class for types that should not be copied or assigned </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a></td><td class="indexvalue">Class the user supplied algorithm body uses to add new tasks </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00234.html">tbb::parallel_while< Body ></a></td><td class="indexvalue">Parallel iteration over a stream, with optional addition of more work </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00235.html">tbb::internal::partition_type_base</a></td><td class="indexvalue">Provides default methods for partition objects without affinity </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00236.html">tbb::pipeline</a></td><td class="indexvalue">A processing pipeling that applies filters to items </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00237.html">tbb::pre_scan_tag</a></td><td class="indexvalue">Used to indicate that the initial scan is being performed </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00238.html">tbb::queuing_mutex</a></td><td class="indexvalue">Queuing lock with local-only spinning </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a></td><td class="indexvalue">Reader-writer lock with local-only spinning </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a></td><td class="indexvalue">Body class used to sort elements in a range that is smaller than the grainsize </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a></td><td class="indexvalue">Body class used to test if elements in a range are presorted </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a></td><td class="indexvalue">Range used in quicksort to split elements into subranges based on a value </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00245.html">tbb::recursive_mutex</a></td><td class="indexvalue">Mutex that allows recursive mutex acquisition </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00249.html">tbb::simple_partitioner</a></td><td class="indexvalue">A simple partitioner </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00250.html">tbb::spin_mutex</a></td><td class="indexvalue">A lock that occupies a single byte </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a></td><td class="indexvalue">Represents acquisition of a mutex </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a></td><td class="indexvalue">Fast, unfair, spinning reader-writer lock with backoff and writer-preference </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a></td><td class="indexvalue">The scoped locking pattern </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00254.html">tbb::split</a></td><td class="indexvalue">Dummy type that distinguishes splitting constructor from copy constructor </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a></td><td class="indexvalue">Task type used in parallel_for </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a></td><td class="indexvalue">Task type used to split the work of parallel_reduce </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a></td><td class="indexvalue">Task type used to split the work of parallel_reduce with <a class="el" href="a00188.html">affinity_partitioner</a> </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a></td><td class="indexvalue">Initial task to split the work </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00259.html">tbb::internal::strip< T ></a></td><td class="indexvalue">Strips its template type argument from 'cv' and '&' qualifiers </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a></td><td class="indexvalue">Split work to be done in the scan </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00261.html">tbb::task</a></td><td class="indexvalue">Base class for user-defined tasks </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00262.html">tbb::task_group_context</a></td><td class="indexvalue">Used to form groups of tasks </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00263.html">tbb::task_list</a></td><td class="indexvalue">A list of children </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00264.html">tbb::internal::task_prefix</a></td><td class="indexvalue">Memory prefix to a task object </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00265.html">tbb::task_scheduler_init</a></td><td class="indexvalue">Class representing reference to tbb scheduler </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a></td><td class="indexvalue">Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a></td><td class="indexvalue">Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1 </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00268.html">tbb::tbb_exception</a></td><td class="indexvalue">Interface to be implemented by all exceptions TBB recognizes and propagates across the threads </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a></td><td class="indexvalue">hash_compare - default argument </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a></td><td class="indexvalue">Versioned thread class </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a></td><td class="indexvalue">Structure used to pass user function with 1 argument to thread </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00272.html">tbb::tick_count</a></td><td class="indexvalue">Absolute timestamp </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00273.html">tbb::tick_count::interval_t</a></td><td class="indexvalue">Relative time interval </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a></td><td class="indexvalue">Meets requirements of a forward iterator for STL and a Value for a <a class="el" href="a00195.html">blocked_range</a>.*/ </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00275.html">tbb::internal::version_tag_v3</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a></td><td class="indexvalue">For internal use only </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a></td><td class="indexvalue">Work around for bug in GNU 3.2 and MSVC compilers </td></tr>
</table>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/concepts.html b/doc/html/concepts.html
index 65c3761..9880d31 100644
--- a/doc/html/concepts.html
+++ b/doc/html/concepts.html
@@ -4,14 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="concepts">TBB concepts</a></h1>A concept is a set of requirements to a type, which are necessary and sufficient for the type to model a particular behavior or a set of behaviors. Some concepts are specific to a particular algorithm (e.g. algorithm body), while other ones are common to several algorithms (e.g. range concept).<p>
All TBB algorithms make use of different classes implementing various concepts. Implementation classes are supplied by the user as type arguments of template parameters and/or as objects passed as function call arguments. The library provides predefined implementations of some concepts (e.g. several kinds of <a class="el" href="range_req.html">ranges</a>), while other ones must always be implemented by the user.<p>
TBB defines a set of minimal requirements each concept must conform to. Here is the list of different concepts hyperlinked to the corresponding requirements specifications:<ul>
<li>range_req</li><li>parallel_do_body_req</li><li>parallel_for_body_req</li><li>parallel_reduce_body_req</li><li>parallel_scan_body_req</li><li>parallel_sort_iter_req </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00122.html b/doc/html/deprecated.html
similarity index 65%
copy from doc/html/a00122.html
copy to doc/html/deprecated.html
index b1b079c..9f07048 100644
--- a/doc/html/a00122.html
+++ b/doc/html/deprecated.html
@@ -1,15 +1,17 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
+<title>Deprecated List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::no_copy Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::internal::no_copy</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1><a class="anchor" name="deprecated">Deprecated List</a></h1><a class="anchor" name="_deprecated000001"></a> <dl>
+<dt>Member <a class="el" href="a00216.html#w4w3">tbb::filter::serial</a> </dt>
+<dd>use serial_in_order instead</dd>
+</dl>
+<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/files.html b/doc/html/files.html
index 327daa9..a19e2ae 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -4,46 +4,49 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindexHL" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindexHL" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
- <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00282.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00283.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>atomic.h</b> <a href="a00284.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00285.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00286.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00287.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00288.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00289.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00290.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00291.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>mutex.h</b> <a href="a00292.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00293.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00294.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00295.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00296.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00297.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00298.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00299.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00300.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00301.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00302.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00303.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>scalable_allocator.h</b> <a href="a00304.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00305.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00306.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>task.h</b> <a href="a00307.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00308.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00309.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00310.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00311.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00312.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00313.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00314.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00315.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>_tbb_windef.h</b> <a href="a00322.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>aligned_space.h</b> <a href="a00323.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>atomic.h</b> <a href="a00324.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>blocked_range.h</b> <a href="a00325.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>blocked_range2d.h</b> <a href="a00326.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>blocked_range3d.h</b> <a href="a00327.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>cache_aligned_allocator.h</b> <a href="a00328.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>concurrent_hash_map.h</b> <a href="a00329.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>concurrent_queue.h</b> <a href="a00330.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>concurrent_vector.h</b> <a href="a00331.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>mutex.h</b> <a href="a00332.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>null_mutex.h</b> <a href="a00333.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>null_rw_mutex.h</b> <a href="a00334.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_do.h</b> <a href="a00335.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_for.h</b> <a href="a00336.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_reduce.h</b> <a href="a00337.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_scan.h</b> <a href="a00338.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_sort.h</b> <a href="a00339.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>parallel_while.h</b> <a href="a00340.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>partitioner.h</b> <a href="a00341.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>pipeline.h</b> <a href="a00342.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>queuing_mutex.h</b> <a href="a00343.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>queuing_rw_mutex.h</b> <a href="a00344.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>recursive_mutex.h</b> <a href="a00345.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00304.html">scalable_allocator.h</a> <a href="a00346.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>spin_mutex.h</b> <a href="a00347.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>spin_rw_mutex.h</b> <a href="a00348.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>task.h</b> <a href="a00349.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>task_scheduler_init.h</b> <a href="a00350.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>task_scheduler_observer.h</b> <a href="a00351.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_allocator.h</b> <a href="a00352.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_exception.h</b> <a href="a00353.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_machine.h</b> <a href="a00354.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_profiling.h</b> <a href="a00355.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_stddef.h</b> <a href="a00356.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tbb_thread.h</b> <a href="a00357.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>tick_count.h</b> <a href="a00358.html">[code]</a></td><td class="indexvalue"></td></tr>
</table>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions.html b/doc/html/functions.html
index 658e110..1554171 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_b">b</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_h">h</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_j">j</a> | <a class="qindex" href="#index_m">m</a> | <a class=" [...]
@@ -13,235 +13,254 @@
<p>
Here is a list of all documented class members with links to the class documentation for each member:<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
<li>acquire()
-: <a class="el" href="a00220.html#a3">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a2">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a3">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a3">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a3">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a3">tbb::mutex::scoped_lock</a><li>add()
-: <a class="el" href="a00204.html#a3">tbb::parallel_while< Body ></a>, <a class="el" href="a00201.html#a0">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00206.html#a2">tbb::pipeline</a><li>add_to_depth()
-: <a class="el" href="a00228.html#a12">tbb::task</a><li>advance()
-: <a class="el" href="a00181.html#b4">tbb::internal::concurrent_queue_iterator_base_v3</a><li>affinity()
-: <a class="el" href="a00228.html#a25">tbb::task</a><li>affinity_id
-: <a class="el" href="a00228.html#w1">tbb::task</a><li>allocate()
-: <a class="el" href="a00232.html#a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a5">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
-: <a class="el" href="a00228.html#a4">tbb::task</a><li>allocate_child()
-: <a class="el" href="a00228.html#a3">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00228.html#a2">tbb::task</a><li>allocate_page()
-: <a class="el" href="a00178.html#b8">tbb::internal::concurrent_queue_base_v3</a><li>allocate_root()
-: <a class="el" href="a00228.html#e0">tbb::task</a><li>allocated
-: <a class="el" href="a00228.html#w8w5">tbb::task</a><li>allocator_type
-: <a class="el" href="a00232.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00177.html#w1">tbb::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00182.html#a38">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00181.html#b3">tbb::internal::concurrent_queue_iterator_base_v3</a><li>at()
-: <a class="el" href="a00182.html#a15">tbb::concurrent_vector< T, A ></a><li>automatic
-: <a class="el" href="a00231.html#s0">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00253.html#a3">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a2">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a3">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a3">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a3">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a3">tbb::mutex::scoped_lock</a><li>add()
+: <a class="el" href="a00234.html#a3">tbb::parallel_while< Body ></a>, <a class="el" href="a00231.html#a0">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00236.html#a2">tbb::pipeline</a><li>add_to_depth()
+: <a class="el" href="a00261.html#a12">tbb::task</a><li>advance()
+: <a class="el" href="a00208.html#b4">tbb::internal::concurrent_queue_iterator_base_v3</a><li>affinity()
+: <a class="el" href="a00261.html#a25">tbb::task</a><li>affinity_id
+: <a class="el" href="a00261.html#w1">tbb::task</a><li>allocate()
+: <a class="el" href="a00266.html#a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00198.html#a5">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
+: <a class="el" href="a00261.html#a4">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00261.html#a3">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00261.html#a2">tbb::task</a><li>allocate_page()
+: <a class="el" href="a00205.html#b8">tbb::internal::concurrent_queue_base_v3</a><li>allocate_root()
+: <a class="el" href="a00261.html#e1">tbb::task</a><li>allocated
+: <a class="el" href="a00261.html#w8w5">tbb::task</a><li>allocator_type
+: <a class="el" href="a00266.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00204.html#w1">tbb::concurrent_queue< T, A ></a><li>assign()
+: <a class="el" href="a00209.html#a38">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00208.html#b3">tbb::internal::concurrent_queue_iterator_base_v3</a>, <a class="el" href="a00205.html#b12">tbb::internal::concurrent_queue_base_v3</a><li>at()
+: <a class="el" href="a00209.html#a15">tbb::concurrent_vector< T, A ></a><li>automatic
+: <a class="el" href="a00265.html#s0">tbb::task_scheduler_init</a></ul>
<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
<li>back()
-: <a class="el" href="a00182.html#a35">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00182.html#a26">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00169.html#a2">tbb::blocked_range< Value ></a>, <a class="el" href="a00164.html#a0">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00169.html#a8">tbb::blocked_range< Value ></a></ul>
+: <a class="el" href="a00209.html#a35">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00209.html#a26">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00195.html#a2">tbb::blocked_range< Value ></a>, <a class="el" href="a00190.html#a0">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00195.html#a8">tbb::blocked_range< Value ></a></ul>
<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>capacity()
-: <a class="el" href="a00182.html#a20">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a8">tbb::concurrent_queue< T, A ></a><li>clear()
-: <a class="el" href="a00229.html#a5">tbb::task_list</a>, <a class="el" href="a00206.html#a4">tbb::pipeline</a>, <a class="el" href="a00182.html#a40">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a11">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>cols()
-: <a class="el" href="a00171.html#a7">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a6">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00182.html#a22">tbb::concurrent_vector< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00174.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>concurrent_queue()
-: <a class="el" href="a00177.html#a0">tbb::concurrent_queue< T, A ></a><li>concurrent_queue_iterator()
-: <a class="el" href="a00180.html#a1">tbb::internal::concurrent_queue_iterator< Container, Value ></a><li>concurrent_queue_iterator_base_v3()
-: <a class="el" href="a00181.html#b2">tbb::internal::concurrent_queue_iterator_base_v3</a><li>concurrent_vector()
-: <a class="el" href="a00182.html#a5">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00176.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>const_iterator
-: <a class="el" href="a00169.html#w0">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00177.html#w3">tbb::concurrent_queue< T, A ></a><li>construct()
-: <a class="el" href="a00232.html#a8">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a8">tbb::cache_aligned_allocator< T ></a><li>count()
-: <a class="el" href="a00174.html#a19">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00261.html#a27">tbb::task</a>, <a class="el" href="a00262.html#a3">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00209.html#a20">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a8">tbb::concurrent_queue< T, A ></a><li>clear()
+: <a class="el" href="a00263.html#a5">tbb::task_list</a>, <a class="el" href="a00236.html#a5">tbb::pipeline</a>, <a class="el" href="a00209.html#a40">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a11">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>cols()
+: <a class="el" href="a00197.html#a7">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a6">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00209.html#a22">tbb::concurrent_vector< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00201.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00204.html#a17">tbb::concurrent_queue< T, A ></a><li>concurrent_queue_iterator()
+: <a class="el" href="a00207.html#a2">tbb::internal::concurrent_queue_iterator< Container, Value ></a><li>concurrent_queue_iterator_base_v3()
+: <a class="el" href="a00208.html#b2">tbb::internal::concurrent_queue_iterator_base_v3</a><li>concurrent_vector()
+: <a class="el" href="a00209.html#a5">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00203.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>const_iterator
+: <a class="el" href="a00195.html#w0">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00204.html#w3">tbb::concurrent_queue< T, A ></a><li>construct()
+: <a class="el" href="a00266.html#a8">tbb::tbb_allocator< T ></a>, <a class="el" href="a00198.html#a8">tbb::cache_aligned_allocator< T ></a><li>count()
+: <a class="el" href="a00201.html#a19">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
<li>deallocate()
-: <a class="el" href="a00232.html#a6">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a6">tbb::cache_aligned_allocator< T ></a><li>deallocate_page()
-: <a class="el" href="a00178.html#b9">tbb::internal::concurrent_queue_base_v3</a><li>default_num_threads()
-: <a class="el" href="a00231.html#e0">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00231.html#s1">tbb::task_scheduler_init</a><li>depth()
-: <a class="el" href="a00228.html#a10">tbb::task</a><li>depth_type
-: <a class="el" href="a00228.html#w0">tbb::task</a><li>destroy()
-: <a class="el" href="a00232.html#a9">tbb::tbb_allocator< T ></a>, <a class="el" href="a00228.html#a5">tbb::task</a>, <a class="el" href="a00172.html#a9">tbb::cache_aligned_allocator< T ></a><li>detach()
-: <a class="el" href="a00234.html#a6">tbb::internal::tbb_thread_v3</a><li>difference_type
-: <a class="el" href="a00177.html#w5">tbb::concurrent_queue< T, A ></a><li>downgrade_to_reader()
-: <a class="el" href="a00220.html#a6">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00211.html#a7">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00266.html#a6">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a6">tbb::scalable_allocator< T ></a>, <a class="el" href="a00198.html#a6">tbb::cache_aligned_allocator< T ></a><li>deallocate_page()
+: <a class="el" href="a00205.html#b9">tbb::internal::concurrent_queue_base_v3</a><li>default_num_threads()
+: <a class="el" href="a00265.html#e0">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00265.html#s1">tbb::task_scheduler_init</a><li>depth()
+: <a class="el" href="a00261.html#a10">tbb::task</a><li>depth_type
+: <a class="el" href="a00261.html#w0">tbb::task</a><li>destroy()
+: <a class="el" href="a00226.html#a9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a5">tbb::captured_exception</a>, <a class="el" href="a00268.html#a1">tbb::tbb_exception</a>, <a class="el" href="a00266.html#a9">tbb::tbb_allocator< T ></a>, <a class="el" href="a00261.html#a5">tbb::task</a>, <a class="el" href="a00198.html#a9">tbb::cache_aligned_allocator< T ></a><li>detach()
+: <a class="el" href="a00270.html#a7">tbb::internal::tbb_thread_v3</a><li>difference_type
+: <a class="el" href="a00204.html#w5">tbb::concurrent_queue< T, A ></a><li>downgrade_to_reader()
+: <a class="el" href="a00253.html#a6">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00241.html#a7">tbb::queuing_rw_mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
<li>empty()
-: <a class="el" href="a00229.html#a2">tbb::task_list</a>, <a class="el" href="a00182.html#a19">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a7">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a15">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00176.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, <a class="el" href="a00197.html#a0">tbb::internal::hash_map_range [...]
-: <a class="el" href="a00182.html#a27">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00169.html#a3">tbb::blocked_range< Value ></a>, <a class="el" href="a00164.html#a1">tbb::aligned_space< T, N ></a><li>erase()
-: <a class="el" href="a00174.html#a30">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>execute()
-: <a class="el" href="a00228.html#a1">tbb::task</a>, <a class="el" href="a00194.html#a0">tbb::internal::finish_scan< Range, Body ></a><li>executing
-: <a class="el" href="a00228.html#w8w2">tbb::task</a></ul>
+: <a class="el" href="a00263.html#a2">tbb::task_list</a>, <a class="el" href="a00209.html#a19">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a7">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a15">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00203.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, <a class="el" href="a00224.html#a0">tbb::internal::hash_map_range [...]
+: <a class="el" href="a00209.html#a27">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00195.html#a3">tbb::blocked_range< Value ></a>, <a class="el" href="a00190.html#a1">tbb::aligned_space< T, N ></a><li>erase()
+: <a class="el" href="a00201.html#a30">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>execute()
+: <a class="el" href="a00261.html#a1">tbb::task</a>, <a class="el" href="a00221.html#a0">tbb::internal::finish_scan< Range, Body ></a><li>executing
+: <a class="el" href="a00261.html#w8w2">tbb::task</a></ul>
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>find()
-: <a class="el" href="a00174.html#a21">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>freed
-: <a class="el" href="a00228.html#w8w6">tbb::task</a><li>front()
-: <a class="el" href="a00182.html#a33">tbb::concurrent_vector< T, A ></a></ul>
+<li>finalize()
+: <a class="el" href="a00216.html#a4">tbb::filter</a><li>find()
+: <a class="el" href="a00201.html#a21">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>freed
+: <a class="el" href="a00261.html#w8w6">tbb::task</a><li>front()
+: <a class="el" href="a00209.html#a33">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>get_allocator()
-: <a class="el" href="a00182.html#a36">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a10">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a17">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>grainsize()
-: <a class="el" href="a00197.html#a7">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00169.html#a5">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00182.html#a9">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00182.html#a10">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00209.html#a36">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a10">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a17">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>grainsize()
+: <a class="el" href="a00224.html#a7">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00195.html#a5">tbb::blocked_range< Value ></a><li>grow_by()
+: <a class="el" href="a00209.html#a9">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00209.html#a10">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
<li>hardware_concurrency()
-: <a class="el" href="a00234.html#e0">tbb::internal::tbb_thread_v3</a><li>hash_map_iterator()
-: <a class="el" href="a00196.html#a0">tbb::internal::hash_map_iterator< Container, Value ></a><li>hash_map_range()
-: <a class="el" href="a00197.html#a4">tbb::internal::hash_map_range< Iterator ></a><li>hashcode_t
-: <a class="el" href="a00195.html#w3">tbb::internal::hash_map_base</a></ul>
+: <a class="el" href="a00270.html#e0">tbb::internal::tbb_thread_v3</a><li>hash_map_iterator()
+: <a class="el" href="a00223.html#a1">tbb::internal::hash_map_iterator< Container, Value ></a><li>hash_map_range()
+: <a class="el" href="a00224.html#a4">tbb::internal::hash_map_range< Iterator ></a><li>hashcode_t
+: <a class="el" href="a00222.html#w3">tbb::internal::hash_map_base</a></ul>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>initialize()
-: <a class="el" href="a00231.html#a1">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00174.html#a27">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>internal_array_op1
-: <a class="el" href="a00183.html#x2">tbb::internal::concurrent_vector_base_v3</a><li>internal_array_op2
-: <a class="el" href="a00183.html#x3">tbb::internal::concurrent_vector_base_v3</a><li>internal_finish_clear()
-: <a class="el" href="a00178.html#b10">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop()
-: <a class="el" href="a00178.html#b3">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop_if_present()
-: <a class="el" href="a00178.html#b5">tbb::internal::concurrent_queue_base_v3</a><li>internal_push()
-: <a class="el" href="a00178.html#b2">tbb::internal::concurrent_queue_base_v3</a><li>internal_push_if_not_full()
-: <a class="el" href="a00178.html#b4">tbb::internal::concurrent_queue_base_v3</a><li>internal_set_capacity()
-: <a class="el" href="a00178.html#b7">tbb::internal::concurrent_queue_base_v3</a><li>internal_size()
-: <a class="el" href="a00178.html#b6">tbb::internal::concurrent_queue_base_v3</a><li>internal_throw_exception()
-: <a class="el" href="a00178.html#b11">tbb::internal::concurrent_queue_base_v3</a><li>interval_t()
-: <a class="el" href="a00237.html#a1">tbb::tick_count::interval_t</a><li>is_divisible()
-: <a class="el" href="a00197.html#a1">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00171.html#a3">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a3">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00169.html#a7">tbb::blocked_range< Value ></a><li>is_owned_by_current_thread()
-: <a class="el" href="a00228.html#a23">tbb::task</a><li>is_serial()
-: <a class="el" href="a00189.html#a0">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00228.html#a20">tbb::task</a><li>item_size
-: <a class="el" href="a00178.html#p2">tbb::internal::concurrent_queue_base_v3</a><li>items_per_page
-: <a class="el" href="a00178.html#p1">tbb::internal::concurrent_queue_base_v3</a></ul>
+<li>init()
+: <a class="el" href="a00262.html#b0">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00265.html#a1">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00201.html#a27">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>internal_array_op1
+: <a class="el" href="a00210.html#x2">tbb::internal::concurrent_vector_base_v3</a><li>internal_array_op2
+: <a class="el" href="a00210.html#x3">tbb::internal::concurrent_vector_base_v3</a><li>internal_finish_clear()
+: <a class="el" href="a00205.html#b10">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop()
+: <a class="el" href="a00205.html#b3">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop_if_present()
+: <a class="el" href="a00205.html#b5">tbb::internal::concurrent_queue_base_v3</a><li>internal_push()
+: <a class="el" href="a00205.html#b2">tbb::internal::concurrent_queue_base_v3</a><li>internal_push_if_not_full()
+: <a class="el" href="a00205.html#b4">tbb::internal::concurrent_queue_base_v3</a><li>internal_set_capacity()
+: <a class="el" href="a00205.html#b7">tbb::internal::concurrent_queue_base_v3</a><li>internal_size()
+: <a class="el" href="a00205.html#b6">tbb::internal::concurrent_queue_base_v3</a><li>internal_throw_exception()
+: <a class="el" href="a00205.html#b11">tbb::internal::concurrent_queue_base_v3</a><li>interval_t()
+: <a class="el" href="a00273.html#a1">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00265.html#a5">tbb::task_scheduler_init</a><li>is_cancelled()
+: <a class="el" href="a00261.html#a28">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00224.html#a1">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00197.html#a3">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a3">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00195.html#a7">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00262.html#a4">tbb::task_group_context</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00261.html#a23">tbb::task</a><li>is_serial()
+: <a class="el" href="a00216.html#a0">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00261.html#a20">tbb::task</a><li>item_size
+: <a class="el" href="a00205.html#p2">tbb::internal::concurrent_queue_base_v3</a><li>items_per_page
+: <a class="el" href="a00205.html#p1">tbb::internal::concurrent_queue_base_v3</a></ul>
<h3><a class="anchor" name="index_j">- j -</a></h3><ul>
<li>join()
-: <a class="el" href="a00234.html#a5">tbb::internal::tbb_thread_v3</a></ul>
+: <a class="el" href="a00270.html#a6">tbb::internal::tbb_thread_v3</a></ul>
<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
<li>malloc_type
-: <a class="el" href="a00232.html#w9">tbb::tbb_allocator< T ></a><li>max_physical_size
-: <a class="el" href="a00195.html#s2">tbb::internal::hash_map_base</a><li>max_size()
-: <a class="el" href="a00232.html#a7">tbb::tbb_allocator< T ></a>, <a class="el" href="a00182.html#a23">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00174.html#a16">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00172.html#a7">tbb::cache_aligned_allocator< T ></a><li>mode
-: <a class="el" href="a00189.html#x2">tbb::filter</a><li>mutex()
-: <a class="el" href="a00198.html#a0">tbb::mutex</a><li>my_capacity
-: <a class="el" href="a00178.html#p0">tbb::internal::concurrent_queue_base_v3</a><li>my_early_size
-: <a class="el" href="a00183.html#p2">tbb::internal::concurrent_vector_base_v3</a><li>my_first_block
-: <a class="el" href="a00183.html#p1">tbb::internal::concurrent_vector_base_v3</a><li>my_item
-: <a class="el" href="a00181.html#p0">tbb::internal::concurrent_queue_iterator_base_v3</a><li>my_segment
-: <a class="el" href="a00183.html#p3">tbb::internal::concurrent_vector_base_v3</a><li>my_storage
-: <a class="el" href="a00183.html#p4">tbb::internal::concurrent_vector_base_v3</a></ul>
+: <a class="el" href="a00266.html#w9">tbb::tbb_allocator< T ></a><li>max_physical_size
+: <a class="el" href="a00222.html#s2">tbb::internal::hash_map_base</a><li>max_size()
+: <a class="el" href="a00266.html#a7">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a7">tbb::scalable_allocator< T ></a>, <a class="el" href="a00209.html#a23">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00201.html#a16">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00198.html#a7">tbb::cache_aligned_allocator< T ></a><li>mode
+: <a class="el" href="a00216.html#w4">tbb::filter</a><li>move()
+: <a class="el" href="a00226.html#a8">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a4">tbb::captured_exception</a>, <a class="el" href="a00268.html#a0">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00227.html#a0">tbb::mutex</a><li>my_capacity
+: <a class="el" href="a00205.html#p0">tbb::internal::concurrent_queue_base_v3</a><li>my_early_size
+: <a class="el" href="a00210.html#p2">tbb::internal::concurrent_vector_base_v3</a><li>my_exception_data
+: <a class="el" href="a00226.html#p0">tbb::movable_exception< ExceptionData ></a><li>my_first_block
+: <a class="el" href="a00210.html#p1">tbb::internal::concurrent_vector_base_v3</a><li>my_item
+: <a class="el" href="a00208.html#p0">tbb::internal::concurrent_queue_iterator_base_v3</a><li>my_segment
+: <a class="el" href="a00210.html#p3">tbb::internal::concurrent_vector_base_v3</a><li>my_storage
+: <a class="el" href="a00210.html#p4">tbb::internal::concurrent_vector_base_v3</a></ul>
<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
<li>n_segment
-: <a class="el" href="a00195.html#s1">tbb::internal::hash_map_base</a><li>n_segment_bits
-: <a class="el" href="a00195.html#s0">tbb::internal::hash_map_base</a><li>no_copy()
-: <a class="el" href="a00200.html#a0">tbb::internal::no_copy</a><li>note_affinity()
-: <a class="el" href="a00228.html#a26">tbb::task</a><li>now()
-: <a class="el" href="a00236.html#e0">tbb::tick_count</a></ul>
+: <a class="el" href="a00222.html#s1">tbb::internal::hash_map_base</a><li>n_segment_bits
+: <a class="el" href="a00222.html#s0">tbb::internal::hash_map_base</a><li>name()
+: <a class="el" href="a00226.html#a6">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a7">tbb::captured_exception</a>, <a class="el" href="a00268.html#a3">tbb::tbb_exception</a><li>no_assign()
+: <a class="el" href="a00229.html#a0">tbb::internal::no_assign</a><li>no_copy()
+: <a class="el" href="a00230.html#a0">tbb::internal::no_copy</a><li>note_affinity()
+: <a class="el" href="a00261.html#a26">tbb::task</a><li>now()
+: <a class="el" href="a00272.html#e0">tbb::tick_count</a></ul>
<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
<li>operator *()
-: <a class="el" href="a00180.html#a3">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00175.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator()()
-: <a class="el" href="a00189.html#a1">tbb::filter</a><li>operator+
-: <a class="el" href="a00237.html#n2">tbb::tick_count::interval_t</a><li>operator++()
-: <a class="el" href="a00238.html#a11">tbb::internal::vector_iterator< Container, Value ></a>, <a class="el" href="a00180.html#a6">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00196.html#a5">tbb::internal::hash_map_iterator< Container, Value ></a><li>operator+=()
-: <a class="el" href="a00237.html#a3">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00236.html#n0">tbb::tick_count</a>, <a class="el" href="a00237.html#n3">tbb::tick_count::interval_t</a><li>operator--()
-: <a class="el" href="a00238.html#a12">tbb::internal::vector_iterator< Container, Value ></a><li>operator-=()
-: <a class="el" href="a00237.html#a4">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00175.html#a1">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator=()
-: <a class="el" href="a00182.html#a7">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00180.html#a2">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00174.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>operator[]()
-: <a class="el" href="a00182.html#a13">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00207.html#a4">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00202.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator()()
+: <a class="el" href="a00216.html#a2">tbb::filter</a><li>operator+
+: <a class="el" href="a00273.html#n2">tbb::tick_count::interval_t</a><li>operator++()
+: <a class="el" href="a00274.html#a12">tbb::internal::vector_iterator< Container, Value ></a>, <a class="el" href="a00207.html#a7">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00223.html#a6">tbb::internal::hash_map_iterator< Container, Value ></a><li>operator+=()
+: <a class="el" href="a00273.html#a3">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00272.html#n0">tbb::tick_count</a>, <a class="el" href="a00273.html#n3">tbb::tick_count::interval_t</a><li>operator--()
+: <a class="el" href="a00274.html#a13">tbb::internal::vector_iterator< Container, Value ></a><li>operator-=()
+: <a class="el" href="a00273.html#a4">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00202.html#a1">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator=()
+: <a class="el" href="a00209.html#a7">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00207.html#a3">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00201.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>operator[]()
+: <a class="el" href="a00209.html#a13">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
<li>page_range_type
-: <a class="el" href="a00171.html#w0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
-: <a class="el" href="a00171.html#a5">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00204.html#a0">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00228.html#a19">tbb::task</a><li>pause()
-: <a class="el" href="a00166.html#a1">tbb::internal::AtomicBackoff</a><li>pipeline()
-: <a class="el" href="a00206.html#a0">tbb::pipeline</a><li>pointers_per_short_table
-: <a class="el" href="a00183.html#x7x5">tbb::internal::concurrent_vector_base_v3</a><li>pop()
-: <a class="el" href="a00177.html#a3">tbb::concurrent_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00229.html#a4">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00177.html#a5">tbb::concurrent_queue< T, A ></a><li>push()
-: <a class="el" href="a00177.html#a2">tbb::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00229.html#a3">tbb::task_list</a>, <a class="el" href="a00182.html#a11">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00177.html#a4">tbb::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00197.html#w0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>pages()
+: <a class="el" href="a00197.html#a5">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel
+: <a class="el" href="a00216.html#w4w0">tbb::filter</a><li>parallel_while()
+: <a class="el" href="a00234.html#a0">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00261.html#a19">tbb::task</a><li>pause()
+: <a class="el" href="a00192.html#a1">tbb::internal::AtomicBackoff</a><li>pipeline()
+: <a class="el" href="a00236.html#a0">tbb::pipeline</a><li>pointers_per_short_table
+: <a class="el" href="a00210.html#x7x5">tbb::internal::concurrent_vector_base_v3</a><li>pop()
+: <a class="el" href="a00204.html#a3">tbb::concurrent_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00263.html#a4">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00204.html#a5">tbb::concurrent_queue< T, A ></a><li>push()
+: <a class="el" href="a00204.html#a2">tbb::concurrent_queue< T, A ></a><li>push_back()
+: <a class="el" href="a00263.html#a3">tbb::task_list</a>, <a class="el" href="a00209.html#a11">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00204.html#a4">tbb::concurrent_queue< T, A ></a></ul>
<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
<li>queuing_mutex()
-: <a class="el" href="a00208.html#a0">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00210.html#a0">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00238.html#a0">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00240.html#a0">tbb::queuing_rw_mutex</a></ul>
<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
<li>range()
-: <a class="el" href="a00182.html#a17">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00182.html#a30">tbb::concurrent_vector< T, A ></a><li>ready
-: <a class="el" href="a00228.html#w8w4">tbb::task</a><li>recursive_mutex()
-: <a class="el" href="a00214.html#a0">tbb::recursive_mutex</a><li>recycle
-: <a class="el" href="a00228.html#w8w7">tbb::task</a><li>recycle_as_child_of()
-: <a class="el" href="a00228.html#a8">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00228.html#a6">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00228.html#a7">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00228.html#a9">tbb::task</a><li>reexecute
-: <a class="el" href="a00228.html#w8w3">tbb::task</a><li>ref_count()
-: <a class="el" href="a00228.html#a22">tbb::task</a><li>reference
-: <a class="el" href="a00177.html#w2">tbb::concurrent_queue< T, A ></a><li>release()
-: <a class="el" href="a00220.html#a5">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a4">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a5">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a5">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a5">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a5">tbb::mutex::scoped_lock</a>, <a class="el" href="a00176.html#a1">tbb::concurrent_has [...]
-: <a class="el" href="a00182.html#a31">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00182.html#a21">tbb::concurrent_vector< T, A ></a><li>row_range_type
-: <a class="el" href="a00170.html#w0">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
-: <a class="el" href="a00171.html#a6">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a5">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00206.html#a3">tbb::pipeline</a>, <a class="el" href="a00204.html#a2">tbb::parallel_while< Body ></a></ul>
+: <a class="el" href="a00209.html#a17">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00209.html#a30">tbb::concurrent_vector< T, A ></a><li>ready
+: <a class="el" href="a00261.html#w8w4">tbb::task</a><li>recursive_mutex()
+: <a class="el" href="a00245.html#a0">tbb::recursive_mutex</a><li>recycle
+: <a class="el" href="a00261.html#w8w7">tbb::task</a><li>recycle_as_child_of()
+: <a class="el" href="a00261.html#a8">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00261.html#a6">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00261.html#a7">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00261.html#a9">tbb::task</a><li>reexecute
+: <a class="el" href="a00261.html#w8w3">tbb::task</a><li>ref_count()
+: <a class="el" href="a00261.html#a22">tbb::task</a><li>reference
+: <a class="el" href="a00204.html#w2">tbb::concurrent_queue< T, A ></a><li>release()
+: <a class="el" href="a00253.html#a5">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a4">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a5">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a5">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a5">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a5">tbb::mutex::scoped_lock</a>, <a class="el" href="a00203.html#a1">tbb::concurrent_has [...]
+: <a class="el" href="a00209.html#a31">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00209.html#a21">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00262.html#a2">tbb::task_group_context</a><li>row_range_type
+: <a class="el" href="a00196.html#w0">tbb::blocked_range2d< RowValue, ColValue ></a><li>rows()
+: <a class="el" href="a00197.html#a6">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a5">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00236.html#a4">tbb::pipeline</a>, <a class="el" href="a00234.html#a2">tbb::parallel_while< Body ></a></ul>
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
<li>scoped_lock()
-: <a class="el" href="a00220.html#a1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a1">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a1">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a1">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a1">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a1">tbb::mutex::scoped_lock</a><li>seconds()
-: <a class="el" href="a00237.html#a2">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00228.html#e3">tbb::task</a><li>set_affinity()
-: <a class="el" href="a00228.html#a24">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00177.html#a9">tbb::concurrent_queue< T, A ></a><li>set_depth()
-: <a class="el" href="a00228.html#a11">tbb::task</a><li>set_ref_count()
-: <a class="el" href="a00228.html#a13">tbb::task</a><li>size()
-: <a class="el" href="a00182.html#a18">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a6">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a14">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00169.html#a4">tbb::blocked_range< Value ></a><li>size_type
-: <a class="el" href="a00177.html#w4">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00197.html#w0">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00169.html#w1">tbb::blocked_range< Value ></a><li>spawn()
-: <a class="el" href="a00228.html#a15">tbb::task</a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00228.html#a17">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00228.html#e2">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00217.html#a0">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00219.html#a0">tbb::spin_rw_mutex_v3</a><li>start_routine()
-: <a class="el" href="a00235.html#e0">tbb::internal::thread_closure_1< F, X ></a><li>state()
-: <a class="el" href="a00228.html#a21">tbb::task</a><li>state_type
-: <a class="el" href="a00228.html#w8">tbb::task</a><li>swap()
-: <a class="el" href="a00182.html#a39">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00174.html#a18">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
+: <a class="el" href="a00253.html#a1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a1">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a1">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a1">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a1">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a1">tbb::mutex::scoped_lock</a><li>seconds()
+: <a class="el" href="a00273.html#a2">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00261.html#e4">tbb::task</a><li>serial
+: <a class="el" href="a00216.html#w4w3">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00216.html#w4w1">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00216.html#w4w2">tbb::filter</a><li>set_affinity()
+: <a class="el" href="a00261.html#a24">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00204.html#a9">tbb::concurrent_queue< T, A ></a><li>set_depth()
+: <a class="el" href="a00261.html#a11">tbb::task</a><li>set_ref_count()
+: <a class="el" href="a00261.html#a13">tbb::task</a><li>size()
+: <a class="el" href="a00209.html#a18">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a6">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a14">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00195.html#a4">tbb::blocked_range< Value ></a><li>size_type
+: <a class="el" href="a00204.html#w4">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00224.html#w0">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00195.html#w1">tbb::blocked_range< Value ></a><li>spawn()
+: <a class="el" href="a00261.html#a15">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00261.html#a17">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00261.html#e3">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00250.html#a0">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00252.html#a0">tbb::spin_rw_mutex_v3</a><li>start_routine()
+: <a class="el" href="a00271.html#e0">tbb::internal::thread_closure_1< F, X ></a><li>state()
+: <a class="el" href="a00261.html#a21">tbb::task</a><li>state_type
+: <a class="el" href="a00261.html#w8">tbb::task</a><li>swap()
+: <a class="el" href="a00209.html#a39">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00201.html#a18">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
<li>task()
-: <a class="el" href="a00228.html#b0">tbb::task</a><li>task_list()
-: <a class="el" href="a00229.html#a0">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00231.html#a3">tbb::task_scheduler_init</a><li>tbb_thread_v3()
-: <a class="el" href="a00234.html#a3">tbb::internal::tbb_thread_v3</a><li>terminate()
-: <a class="el" href="a00231.html#a2">tbb::task_scheduler_init</a><li>tick_count()
-: <a class="el" href="a00236.html#a0">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00220.html#a7">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a3">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a4">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a4">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a4">tbb::mutex::scoped_lock</a></ul>
+: <a class="el" href="a00261.html#b0">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00262.html#a0">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00263.html#a0">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00265.html#a3">tbb::task_scheduler_init</a><li>tbb_thread_v3()
+: <a class="el" href="a00270.html#a3">tbb::internal::tbb_thread_v3</a><li>terminate()
+: <a class="el" href="a00265.html#a2">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00226.html#a10">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a6">tbb::captured_exception</a>, <a class="el" href="a00268.html#a2">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00272.html#a0">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00253.html#a7">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a3">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a4">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a4">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a4">tbb::mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
<li>upgrade_to_writer()
-: <a class="el" href="a00220.html#a4">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00211.html#a6">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00253.html#a4">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00241.html#a6">tbb::queuing_rw_mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
<li>value_type
-: <a class="el" href="a00204.html#w0">tbb::parallel_while< Body ></a>, <a class="el" href="a00177.html#w0">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00175.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>vector_allocator_ptr
-: <a class="el" href="a00183.html#p0">tbb::internal::concurrent_vector_base_v3</a><li>vector_iterator()
-: <a class="el" href="a00238.html#a0">tbb::internal::vector_iterator< Container, Value ></a></ul>
+: <a class="el" href="a00234.html#w0">tbb::parallel_while< Body ></a>, <a class="el" href="a00204.html#w0">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00202.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>vector_allocator_ptr
+: <a class="el" href="a00210.html#p0">tbb::internal::concurrent_vector_base_v3</a><li>vector_iterator()
+: <a class="el" href="a00274.html#a1">tbb::internal::vector_iterator< Container, Value ></a></ul>
<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
<li>wait_for_all()
-: <a class="el" href="a00228.html#a18">tbb::task</a></ul>
+: <a class="el" href="a00261.html#a18">tbb::task</a><li>what()
+: <a class="el" href="a00226.html#a7">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a8">tbb::captured_exception</a>, <a class="el" href="a00268.html#a4">tbb::tbb_exception</a></ul>
<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
<li>~concurrent_hash_map()
-: <a class="el" href="a00174.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>~concurrent_queue()
-: <a class="el" href="a00177.html#a1">tbb::concurrent_queue< T, A ></a><li>~concurrent_queue_iterator_base_v3()
-: <a class="el" href="a00181.html#b5">tbb::internal::concurrent_queue_iterator_base_v3</a><li>~concurrent_vector()
-: <a class="el" href="a00182.html#a41">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00176.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>~filter()
-: <a class="el" href="a00189.html#a2">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00204.html#a1">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00206.html#a1">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00210.html#a1">tbb::queuing_rw_mutex</a><li>~scoped_lock()
-: <a class="el" href="a00220.html#a2">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a5">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a2">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a2">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a2">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a2">tbb::mutex::scoped_lock</a><li>~task()
-: <a class="el" href="a00228.html#a0">tbb::task</a><li>~task_list()
-: <a class="el" href="a00229.html#a1">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00231.html#a4">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00201.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>~concurrent_queue()
+: <a class="el" href="a00204.html#a1">tbb::concurrent_queue< T, A ></a><li>~concurrent_queue_iterator_base_v3()
+: <a class="el" href="a00208.html#b5">tbb::internal::concurrent_queue_iterator_base_v3</a><li>~concurrent_vector()
+: <a class="el" href="a00209.html#a41">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00203.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>~filter()
+: <a class="el" href="a00216.html#a3">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00234.html#a1">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00236.html#a1">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00240.html#a1">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00253.html#a2">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a5">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a2">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a2">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a2">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a2">tbb::mutex::scoped_lock</a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00252.html#a1">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00261.html#a0">tbb::task</a><li>~task_list()
+: <a class="el" href="a00263.html#a1">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00265.html#a4">tbb::task_scheduler_init</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_enum.html b/doc/html/functions_enum.html
index bee7b1e..16026f7 100644
--- a/doc/html/functions_enum.html
+++ b/doc/html/functions_enum.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindexHL" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<p>
<ul>
<li>malloc_type
-: <a class="el" href="a00232.html#w9">tbb::tbb_allocator< T ></a><li>mode
-: <a class="el" href="a00189.html#x2">tbb::filter</a><li>state_type
-: <a class="el" href="a00228.html#w8">tbb::task</a></ul>
+: <a class="el" href="a00266.html#w9">tbb::tbb_allocator< T ></a><li>mode
+: <a class="el" href="a00216.html#w4">tbb::filter</a><li>state_type
+: <a class="el" href="a00261.html#w8">tbb::task</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_eval.html b/doc/html/functions_eval.html
index ed731fb..6ceb0c2 100644
--- a/doc/html/functions_eval.html
+++ b/doc/html/functions_eval.html
@@ -4,22 +4,26 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindexHL" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<p>
<ul>
<li>allocated
-: <a class="el" href="a00228.html#w8w5">tbb::task</a><li>executing
-: <a class="el" href="a00228.html#w8w2">tbb::task</a><li>freed
-: <a class="el" href="a00228.html#w8w6">tbb::task</a><li>pointers_per_short_table
-: <a class="el" href="a00183.html#x7x5">tbb::internal::concurrent_vector_base_v3</a><li>ready
-: <a class="el" href="a00228.html#w8w4">tbb::task</a><li>recycle
-: <a class="el" href="a00228.html#w8w7">tbb::task</a><li>reexecute
-: <a class="el" href="a00228.html#w8w3">tbb::task</a></ul>
+: <a class="el" href="a00261.html#w8w5">tbb::task</a><li>executing
+: <a class="el" href="a00261.html#w8w2">tbb::task</a><li>freed
+: <a class="el" href="a00261.html#w8w6">tbb::task</a><li>parallel
+: <a class="el" href="a00216.html#w4w0">tbb::filter</a><li>pointers_per_short_table
+: <a class="el" href="a00210.html#x7x5">tbb::internal::concurrent_vector_base_v3</a><li>ready
+: <a class="el" href="a00261.html#w8w4">tbb::task</a><li>recycle
+: <a class="el" href="a00261.html#w8w7">tbb::task</a><li>reexecute
+: <a class="el" href="a00261.html#w8w3">tbb::task</a><li>serial
+: <a class="el" href="a00216.html#w4w3">tbb::filter</a><li>serial_in_order
+: <a class="el" href="a00216.html#w4w1">tbb::filter</a><li>serial_out_of_order
+: <a class="el" href="a00216.html#w4w2">tbb::filter</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
index 843f297..2ffc147 100644
--- a/doc/html/functions_func.html
+++ b/doc/html/functions_func.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_b">b</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_g">g</a> | <a class="qindex" href="#index_h">h</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_j">j</a> | <a class="qindex" href="#index_m">m</a> | <a class=" [...]
@@ -13,196 +13,210 @@
<p>
<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
<li>acquire()
-: <a class="el" href="a00220.html#a3">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a2">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a3">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a3">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a3">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a3">tbb::mutex::scoped_lock</a><li>add()
-: <a class="el" href="a00204.html#a3">tbb::parallel_while< Body ></a>, <a class="el" href="a00201.html#a0">tbb::parallel_do_feeder< Item ></a><li>add_filter()
-: <a class="el" href="a00206.html#a2">tbb::pipeline</a><li>add_to_depth()
-: <a class="el" href="a00228.html#a12">tbb::task</a><li>advance()
-: <a class="el" href="a00181.html#b4">tbb::internal::concurrent_queue_iterator_base_v3</a><li>affinity()
-: <a class="el" href="a00228.html#a25">tbb::task</a><li>allocate()
-: <a class="el" href="a00232.html#a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a5">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
-: <a class="el" href="a00228.html#a4">tbb::task</a><li>allocate_child()
-: <a class="el" href="a00228.html#a3">tbb::task</a><li>allocate_continuation()
-: <a class="el" href="a00228.html#a2">tbb::task</a><li>allocate_page()
-: <a class="el" href="a00178.html#b8">tbb::internal::concurrent_queue_base_v3</a><li>allocate_root()
-: <a class="el" href="a00228.html#e0">tbb::task</a><li>allocator_type()
-: <a class="el" href="a00232.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00177.html#w1">tbb::concurrent_queue< T, A ></a><li>assign()
-: <a class="el" href="a00182.html#a38">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00181.html#b3">tbb::internal::concurrent_queue_iterator_base_v3</a><li>at()
-: <a class="el" href="a00182.html#a15">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00253.html#a3">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a2">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a3">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a3">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a3">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a3">tbb::mutex::scoped_lock</a><li>add()
+: <a class="el" href="a00234.html#a3">tbb::parallel_while< Body ></a>, <a class="el" href="a00231.html#a0">tbb::parallel_do_feeder< Item ></a><li>add_filter()
+: <a class="el" href="a00236.html#a2">tbb::pipeline</a><li>add_to_depth()
+: <a class="el" href="a00261.html#a12">tbb::task</a><li>advance()
+: <a class="el" href="a00208.html#b4">tbb::internal::concurrent_queue_iterator_base_v3</a><li>affinity()
+: <a class="el" href="a00261.html#a25">tbb::task</a><li>allocate()
+: <a class="el" href="a00266.html#a5">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a5">tbb::scalable_allocator< T ></a>, <a class="el" href="a00198.html#a5">tbb::cache_aligned_allocator< T ></a><li>allocate_additional_child_of()
+: <a class="el" href="a00261.html#a4">tbb::task</a><li>allocate_child()
+: <a class="el" href="a00261.html#a3">tbb::task</a><li>allocate_continuation()
+: <a class="el" href="a00261.html#a2">tbb::task</a><li>allocate_page()
+: <a class="el" href="a00205.html#b8">tbb::internal::concurrent_queue_base_v3</a><li>allocate_root()
+: <a class="el" href="a00261.html#e1">tbb::task</a><li>allocator_type()
+: <a class="el" href="a00266.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00204.html#w1">tbb::concurrent_queue< T, A ></a><li>assign()
+: <a class="el" href="a00209.html#a38">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00208.html#b3">tbb::internal::concurrent_queue_iterator_base_v3</a>, <a class="el" href="a00205.html#b12">tbb::internal::concurrent_queue_base_v3</a><li>at()
+: <a class="el" href="a00209.html#a15">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
<li>back()
-: <a class="el" href="a00182.html#a35">tbb::concurrent_vector< T, A ></a><li>begin()
-: <a class="el" href="a00182.html#a26">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00169.html#a2">tbb::blocked_range< Value ></a>, <a class="el" href="a00164.html#a0">tbb::aligned_space< T, N ></a><li>blocked_range()
-: <a class="el" href="a00169.html#a8">tbb::blocked_range< Value ></a></ul>
+: <a class="el" href="a00209.html#a35">tbb::concurrent_vector< T, A ></a><li>begin()
+: <a class="el" href="a00209.html#a26">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00195.html#a2">tbb::blocked_range< Value ></a>, <a class="el" href="a00190.html#a0">tbb::aligned_space< T, N ></a><li>blocked_range()
+: <a class="el" href="a00195.html#a8">tbb::blocked_range< Value ></a></ul>
<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>capacity()
-: <a class="el" href="a00182.html#a20">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a8">tbb::concurrent_queue< T, A ></a><li>clear()
-: <a class="el" href="a00229.html#a5">tbb::task_list</a>, <a class="el" href="a00206.html#a4">tbb::pipeline</a>, <a class="el" href="a00182.html#a40">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a11">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>cols()
-: <a class="el" href="a00171.html#a7">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a6">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
-: <a class="el" href="a00182.html#a22">tbb::concurrent_vector< T, A ></a><li>concurrent_hash_map()
-: <a class="el" href="a00174.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>concurrent_queue()
-: <a class="el" href="a00177.html#a0">tbb::concurrent_queue< T, A ></a><li>concurrent_queue_iterator()
-: <a class="el" href="a00180.html#a1">tbb::internal::concurrent_queue_iterator< Container, Value ></a><li>concurrent_queue_iterator_base_v3()
-: <a class="el" href="a00181.html#b2">tbb::internal::concurrent_queue_iterator_base_v3</a><li>concurrent_vector()
-: <a class="el" href="a00182.html#a5">tbb::concurrent_vector< T, A ></a><li>const_accessor()
-: <a class="el" href="a00176.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>construct()
-: <a class="el" href="a00232.html#a8">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a8">tbb::cache_aligned_allocator< T ></a><li>count()
-: <a class="el" href="a00174.html#a19">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
+<li>cancel_group_execution()
+: <a class="el" href="a00261.html#a27">tbb::task</a>, <a class="el" href="a00262.html#a3">tbb::task_group_context</a><li>capacity()
+: <a class="el" href="a00209.html#a20">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a8">tbb::concurrent_queue< T, A ></a><li>clear()
+: <a class="el" href="a00263.html#a5">tbb::task_list</a>, <a class="el" href="a00236.html#a5">tbb::pipeline</a>, <a class="el" href="a00209.html#a40">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a11">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>cols()
+: <a class="el" href="a00197.html#a7">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a6">tbb::blocked_range2d< RowValue, ColValue ></a><li>compact()
+: <a class="el" href="a00209.html#a22">tbb::concurrent_vector< T, A ></a><li>concurrent_hash_map()
+: <a class="el" href="a00201.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>concurrent_queue()
+: <a class="el" href="a00204.html#a17">tbb::concurrent_queue< T, A ></a><li>concurrent_queue_iterator()
+: <a class="el" href="a00207.html#a2">tbb::internal::concurrent_queue_iterator< Container, Value ></a><li>concurrent_queue_iterator_base_v3()
+: <a class="el" href="a00208.html#b2">tbb::internal::concurrent_queue_iterator_base_v3</a><li>concurrent_vector()
+: <a class="el" href="a00209.html#a5">tbb::concurrent_vector< T, A ></a><li>const_accessor()
+: <a class="el" href="a00203.html#a4">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>construct()
+: <a class="el" href="a00266.html#a8">tbb::tbb_allocator< T ></a>, <a class="el" href="a00198.html#a8">tbb::cache_aligned_allocator< T ></a><li>count()
+: <a class="el" href="a00201.html#a19">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
<li>deallocate()
-: <a class="el" href="a00232.html#a6">tbb::tbb_allocator< T ></a>, <a class="el" href="a00172.html#a6">tbb::cache_aligned_allocator< T ></a><li>deallocate_page()
-: <a class="el" href="a00178.html#b9">tbb::internal::concurrent_queue_base_v3</a><li>default_num_threads()
-: <a class="el" href="a00231.html#e0">tbb::task_scheduler_init</a><li>depth()
-: <a class="el" href="a00228.html#a10">tbb::task</a><li>destroy()
-: <a class="el" href="a00232.html#a9">tbb::tbb_allocator< T ></a>, <a class="el" href="a00228.html#a5">tbb::task</a>, <a class="el" href="a00172.html#a9">tbb::cache_aligned_allocator< T ></a><li>detach()
-: <a class="el" href="a00234.html#a6">tbb::internal::tbb_thread_v3</a><li>downgrade_to_reader()
-: <a class="el" href="a00220.html#a6">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00211.html#a7">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00266.html#a6">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a6">tbb::scalable_allocator< T ></a>, <a class="el" href="a00198.html#a6">tbb::cache_aligned_allocator< T ></a><li>deallocate_page()
+: <a class="el" href="a00205.html#b9">tbb::internal::concurrent_queue_base_v3</a><li>default_num_threads()
+: <a class="el" href="a00265.html#e0">tbb::task_scheduler_init</a><li>depth()
+: <a class="el" href="a00261.html#a10">tbb::task</a><li>destroy()
+: <a class="el" href="a00226.html#a9">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a5">tbb::captured_exception</a>, <a class="el" href="a00268.html#a1">tbb::tbb_exception</a>, <a class="el" href="a00266.html#a9">tbb::tbb_allocator< T ></a>, <a class="el" href="a00261.html#a5">tbb::task</a>, <a class="el" href="a00198.html#a9">tbb::cache_aligned_allocator< T ></a><li>detach()
+: <a class="el" href="a00270.html#a7">tbb::internal::tbb_thread_v3</a><li>downgrade_to_reader()
+: <a class="el" href="a00253.html#a6">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00241.html#a7">tbb::queuing_rw_mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
<li>empty()
-: <a class="el" href="a00229.html#a2">tbb::task_list</a>, <a class="el" href="a00182.html#a19">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a7">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a15">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00176.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, <a class="el" href="a00197.html#a0">tbb::internal::hash_map_range [...]
-: <a class="el" href="a00182.html#a27">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00169.html#a3">tbb::blocked_range< Value ></a>, <a class="el" href="a00164.html#a1">tbb::aligned_space< T, N ></a><li>erase()
-: <a class="el" href="a00174.html#a30">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>execute()
-: <a class="el" href="a00228.html#a1">tbb::task</a>, <a class="el" href="a00194.html#a0">tbb::internal::finish_scan< Range, Body ></a></ul>
+: <a class="el" href="a00263.html#a2">tbb::task_list</a>, <a class="el" href="a00209.html#a19">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a7">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a15">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00203.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>, <a class="el" href="a00224.html#a0">tbb::internal::hash_map_range [...]
+: <a class="el" href="a00209.html#a27">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00195.html#a3">tbb::blocked_range< Value ></a>, <a class="el" href="a00190.html#a1">tbb::aligned_space< T, N ></a><li>erase()
+: <a class="el" href="a00201.html#a30">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>execute()
+: <a class="el" href="a00261.html#a1">tbb::task</a>, <a class="el" href="a00221.html#a0">tbb::internal::finish_scan< Range, Body ></a></ul>
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>find()
-: <a class="el" href="a00174.html#a21">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>front()
-: <a class="el" href="a00182.html#a33">tbb::concurrent_vector< T, A ></a></ul>
+<li>finalize()
+: <a class="el" href="a00216.html#a4">tbb::filter</a><li>find()
+: <a class="el" href="a00201.html#a21">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>front()
+: <a class="el" href="a00209.html#a33">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
<li>get_allocator()
-: <a class="el" href="a00182.html#a36">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a10">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a17">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>grainsize()
-: <a class="el" href="a00197.html#a7">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00169.html#a5">tbb::blocked_range< Value ></a><li>grow_by()
-: <a class="el" href="a00182.html#a9">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
-: <a class="el" href="a00182.html#a10">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00209.html#a36">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a10">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a17">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>grainsize()
+: <a class="el" href="a00224.html#a7">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00195.html#a5">tbb::blocked_range< Value ></a><li>grow_by()
+: <a class="el" href="a00209.html#a9">tbb::concurrent_vector< T, A ></a><li>grow_to_at_least()
+: <a class="el" href="a00209.html#a10">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
<li>hardware_concurrency()
-: <a class="el" href="a00234.html#e0">tbb::internal::tbb_thread_v3</a><li>hash_map_iterator()
-: <a class="el" href="a00196.html#a0">tbb::internal::hash_map_iterator< Container, Value ></a><li>hash_map_range()
-: <a class="el" href="a00197.html#a4">tbb::internal::hash_map_range< Iterator ></a></ul>
+: <a class="el" href="a00270.html#e0">tbb::internal::tbb_thread_v3</a><li>hash_map_iterator()
+: <a class="el" href="a00223.html#a1">tbb::internal::hash_map_iterator< Container, Value ></a><li>hash_map_range()
+: <a class="el" href="a00224.html#a4">tbb::internal::hash_map_range< Iterator ></a></ul>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>initialize()
-: <a class="el" href="a00231.html#a1">tbb::task_scheduler_init</a><li>insert()
-: <a class="el" href="a00174.html#a27">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>internal_finish_clear()
-: <a class="el" href="a00178.html#b10">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop()
-: <a class="el" href="a00178.html#b3">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop_if_present()
-: <a class="el" href="a00178.html#b5">tbb::internal::concurrent_queue_base_v3</a><li>internal_push()
-: <a class="el" href="a00178.html#b2">tbb::internal::concurrent_queue_base_v3</a><li>internal_push_if_not_full()
-: <a class="el" href="a00178.html#b4">tbb::internal::concurrent_queue_base_v3</a><li>internal_set_capacity()
-: <a class="el" href="a00178.html#b7">tbb::internal::concurrent_queue_base_v3</a><li>internal_size()
-: <a class="el" href="a00178.html#b6">tbb::internal::concurrent_queue_base_v3</a><li>internal_throw_exception()
-: <a class="el" href="a00178.html#b11">tbb::internal::concurrent_queue_base_v3</a><li>interval_t()
-: <a class="el" href="a00237.html#a1">tbb::tick_count::interval_t</a><li>is_divisible()
-: <a class="el" href="a00197.html#a1">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00171.html#a3">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a3">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00169.html#a7">tbb::blocked_range< Value ></a><li>is_owned_by_current_thread()
-: <a class="el" href="a00228.html#a23">tbb::task</a><li>is_serial()
-: <a class="el" href="a00189.html#a0">tbb::filter</a><li>is_stolen_task()
-: <a class="el" href="a00228.html#a20">tbb::task</a></ul>
+<li>init()
+: <a class="el" href="a00262.html#b0">tbb::task_group_context</a><li>initialize()
+: <a class="el" href="a00265.html#a1">tbb::task_scheduler_init</a><li>insert()
+: <a class="el" href="a00201.html#a27">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>internal_finish_clear()
+: <a class="el" href="a00205.html#b10">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop()
+: <a class="el" href="a00205.html#b3">tbb::internal::concurrent_queue_base_v3</a><li>internal_pop_if_present()
+: <a class="el" href="a00205.html#b5">tbb::internal::concurrent_queue_base_v3</a><li>internal_push()
+: <a class="el" href="a00205.html#b2">tbb::internal::concurrent_queue_base_v3</a><li>internal_push_if_not_full()
+: <a class="el" href="a00205.html#b4">tbb::internal::concurrent_queue_base_v3</a><li>internal_set_capacity()
+: <a class="el" href="a00205.html#b7">tbb::internal::concurrent_queue_base_v3</a><li>internal_size()
+: <a class="el" href="a00205.html#b6">tbb::internal::concurrent_queue_base_v3</a><li>internal_throw_exception()
+: <a class="el" href="a00205.html#b11">tbb::internal::concurrent_queue_base_v3</a><li>interval_t()
+: <a class="el" href="a00273.html#a1">tbb::tick_count::interval_t</a><li>is_active()
+: <a class="el" href="a00265.html#a5">tbb::task_scheduler_init</a><li>is_cancelled()
+: <a class="el" href="a00261.html#a28">tbb::task</a><li>is_divisible()
+: <a class="el" href="a00224.html#a1">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00197.html#a3">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a3">tbb::blocked_range2d< RowValue, ColValue ></a>, <a class="el" href="a00195.html#a7">tbb::blocked_range< Value ></a><li>is_group_execution_cancelled()
+: <a class="el" href="a00262.html#a4">tbb::task_group_context</a><li>is_owned_by_current_thread()
+: <a class="el" href="a00261.html#a23">tbb::task</a><li>is_serial()
+: <a class="el" href="a00216.html#a0">tbb::filter</a><li>is_stolen_task()
+: <a class="el" href="a00261.html#a20">tbb::task</a></ul>
<h3><a class="anchor" name="index_j">- j -</a></h3><ul>
<li>join()
-: <a class="el" href="a00234.html#a5">tbb::internal::tbb_thread_v3</a></ul>
+: <a class="el" href="a00270.html#a6">tbb::internal::tbb_thread_v3</a></ul>
<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
<li>max_size()
-: <a class="el" href="a00232.html#a7">tbb::tbb_allocator< T ></a>, <a class="el" href="a00182.html#a23">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00174.html#a16">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00172.html#a7">tbb::cache_aligned_allocator< T ></a><li>mutex()
-: <a class="el" href="a00198.html#a0">tbb::mutex</a></ul>
+: <a class="el" href="a00266.html#a7">tbb::tbb_allocator< T ></a>, <a class="el" href="a00247.html#a7">tbb::scalable_allocator< T ></a>, <a class="el" href="a00209.html#a23">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00201.html#a16">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00198.html#a7">tbb::cache_aligned_allocator< T ></a><li>move()
+: <a class="el" href="a00226.html#a8">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a4">tbb::captured_exception</a>, <a class="el" href="a00268.html#a0">tbb::tbb_exception</a><li>mutex()
+: <a class="el" href="a00227.html#a0">tbb::mutex</a></ul>
<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>no_copy()
-: <a class="el" href="a00200.html#a0">tbb::internal::no_copy</a><li>note_affinity()
-: <a class="el" href="a00228.html#a26">tbb::task</a><li>now()
-: <a class="el" href="a00236.html#e0">tbb::tick_count</a></ul>
+<li>name()
+: <a class="el" href="a00226.html#a6">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a7">tbb::captured_exception</a>, <a class="el" href="a00268.html#a3">tbb::tbb_exception</a><li>no_assign()
+: <a class="el" href="a00229.html#a0">tbb::internal::no_assign</a><li>no_copy()
+: <a class="el" href="a00230.html#a0">tbb::internal::no_copy</a><li>note_affinity()
+: <a class="el" href="a00261.html#a26">tbb::task</a><li>now()
+: <a class="el" href="a00272.html#e0">tbb::tick_count</a></ul>
<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
<li>operator *()
-: <a class="el" href="a00180.html#a3">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00175.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator()()
-: <a class="el" href="a00189.html#a1">tbb::filter</a><li>operator++()
-: <a class="el" href="a00238.html#a11">tbb::internal::vector_iterator< Container, Value ></a>, <a class="el" href="a00180.html#a6">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00196.html#a5">tbb::internal::hash_map_iterator< Container, Value ></a><li>operator+=()
-: <a class="el" href="a00237.html#a3">tbb::tick_count::interval_t</a><li>operator--()
-: <a class="el" href="a00238.html#a12">tbb::internal::vector_iterator< Container, Value ></a><li>operator-=()
-: <a class="el" href="a00237.html#a4">tbb::tick_count::interval_t</a><li>operator->()
-: <a class="el" href="a00175.html#a1">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator=()
-: <a class="el" href="a00182.html#a7">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00180.html#a2">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00174.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>operator[]()
-: <a class="el" href="a00182.html#a13">tbb::concurrent_vector< T, A ></a></ul>
+: <a class="el" href="a00207.html#a4">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00202.html#a0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#a2">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator()()
+: <a class="el" href="a00216.html#a2">tbb::filter</a><li>operator++()
+: <a class="el" href="a00274.html#a12">tbb::internal::vector_iterator< Container, Value ></a>, <a class="el" href="a00207.html#a7">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00223.html#a6">tbb::internal::hash_map_iterator< Container, Value ></a><li>operator+=()
+: <a class="el" href="a00273.html#a3">tbb::tick_count::interval_t</a><li>operator--()
+: <a class="el" href="a00274.html#a13">tbb::internal::vector_iterator< Container, Value ></a><li>operator-=()
+: <a class="el" href="a00273.html#a4">tbb::tick_count::interval_t</a><li>operator->()
+: <a class="el" href="a00202.html#a1">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>operator=()
+: <a class="el" href="a00209.html#a7">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00207.html#a3">tbb::internal::concurrent_queue_iterator< Container, Value ></a>, <a class="el" href="a00201.html#a3">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>operator[]()
+: <a class="el" href="a00209.html#a13">tbb::concurrent_vector< T, A ></a></ul>
<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
<li>pages()
-: <a class="el" href="a00171.html#a5">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
-: <a class="el" href="a00204.html#a0">tbb::parallel_while< Body ></a><li>parent()
-: <a class="el" href="a00228.html#a19">tbb::task</a><li>pause()
-: <a class="el" href="a00166.html#a1">tbb::internal::AtomicBackoff</a><li>pipeline()
-: <a class="el" href="a00206.html#a0">tbb::pipeline</a><li>pop()
-: <a class="el" href="a00177.html#a3">tbb::concurrent_queue< T, A ></a><li>pop_front()
-: <a class="el" href="a00229.html#a4">tbb::task_list</a><li>pop_if_present()
-: <a class="el" href="a00177.html#a5">tbb::concurrent_queue< T, A ></a><li>push()
-: <a class="el" href="a00177.html#a2">tbb::concurrent_queue< T, A ></a><li>push_back()
-: <a class="el" href="a00229.html#a3">tbb::task_list</a>, <a class="el" href="a00182.html#a11">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
-: <a class="el" href="a00177.html#a4">tbb::concurrent_queue< T, A ></a></ul>
+: <a class="el" href="a00197.html#a5">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>parallel_while()
+: <a class="el" href="a00234.html#a0">tbb::parallel_while< Body ></a><li>parent()
+: <a class="el" href="a00261.html#a19">tbb::task</a><li>pause()
+: <a class="el" href="a00192.html#a1">tbb::internal::AtomicBackoff</a><li>pipeline()
+: <a class="el" href="a00236.html#a0">tbb::pipeline</a><li>pop()
+: <a class="el" href="a00204.html#a3">tbb::concurrent_queue< T, A ></a><li>pop_front()
+: <a class="el" href="a00263.html#a4">tbb::task_list</a><li>pop_if_present()
+: <a class="el" href="a00204.html#a5">tbb::concurrent_queue< T, A ></a><li>push()
+: <a class="el" href="a00204.html#a2">tbb::concurrent_queue< T, A ></a><li>push_back()
+: <a class="el" href="a00263.html#a3">tbb::task_list</a>, <a class="el" href="a00209.html#a11">tbb::concurrent_vector< T, A ></a><li>push_if_not_full()
+: <a class="el" href="a00204.html#a4">tbb::concurrent_queue< T, A ></a></ul>
<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
<li>queuing_mutex()
-: <a class="el" href="a00208.html#a0">tbb::queuing_mutex</a><li>queuing_rw_mutex()
-: <a class="el" href="a00210.html#a0">tbb::queuing_rw_mutex</a></ul>
+: <a class="el" href="a00238.html#a0">tbb::queuing_mutex</a><li>queuing_rw_mutex()
+: <a class="el" href="a00240.html#a0">tbb::queuing_rw_mutex</a></ul>
<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
<li>range()
-: <a class="el" href="a00182.html#a17">tbb::concurrent_vector< T, A ></a><li>rbegin()
-: <a class="el" href="a00182.html#a30">tbb::concurrent_vector< T, A ></a><li>recursive_mutex()
-: <a class="el" href="a00214.html#a0">tbb::recursive_mutex</a><li>recycle_as_child_of()
-: <a class="el" href="a00228.html#a8">tbb::task</a><li>recycle_as_continuation()
-: <a class="el" href="a00228.html#a6">tbb::task</a><li>recycle_as_safe_continuation()
-: <a class="el" href="a00228.html#a7">tbb::task</a><li>recycle_to_reexecute()
-: <a class="el" href="a00228.html#a9">tbb::task</a><li>ref_count()
-: <a class="el" href="a00228.html#a22">tbb::task</a><li>release()
-: <a class="el" href="a00220.html#a5">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a4">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a5">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a5">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a5">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a5">tbb::mutex::scoped_lock</a>, <a class="el" href="a00176.html#a1">tbb::concurrent_has [...]
-: <a class="el" href="a00182.html#a31">tbb::concurrent_vector< T, A ></a><li>reserve()
-: <a class="el" href="a00182.html#a21">tbb::concurrent_vector< T, A ></a><li>rows()
-: <a class="el" href="a00171.html#a6">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00170.html#a5">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
-: <a class="el" href="a00206.html#a3">tbb::pipeline</a>, <a class="el" href="a00204.html#a2">tbb::parallel_while< Body ></a></ul>
+: <a class="el" href="a00209.html#a17">tbb::concurrent_vector< T, A ></a><li>rbegin()
+: <a class="el" href="a00209.html#a30">tbb::concurrent_vector< T, A ></a><li>recursive_mutex()
+: <a class="el" href="a00245.html#a0">tbb::recursive_mutex</a><li>recycle_as_child_of()
+: <a class="el" href="a00261.html#a8">tbb::task</a><li>recycle_as_continuation()
+: <a class="el" href="a00261.html#a6">tbb::task</a><li>recycle_as_safe_continuation()
+: <a class="el" href="a00261.html#a7">tbb::task</a><li>recycle_to_reexecute()
+: <a class="el" href="a00261.html#a9">tbb::task</a><li>ref_count()
+: <a class="el" href="a00261.html#a22">tbb::task</a><li>release()
+: <a class="el" href="a00253.html#a5">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a4">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a5">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a5">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a5">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a5">tbb::mutex::scoped_lock</a>, <a class="el" href="a00203.html#a1">tbb::concurrent_has [...]
+: <a class="el" href="a00209.html#a31">tbb::concurrent_vector< T, A ></a><li>reserve()
+: <a class="el" href="a00209.html#a21">tbb::concurrent_vector< T, A ></a><li>reset()
+: <a class="el" href="a00262.html#a2">tbb::task_group_context</a><li>rows()
+: <a class="el" href="a00197.html#a6">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>, <a class="el" href="a00196.html#a5">tbb::blocked_range2d< RowValue, ColValue ></a><li>run()
+: <a class="el" href="a00236.html#a4">tbb::pipeline</a>, <a class="el" href="a00234.html#a2">tbb::parallel_while< Body ></a></ul>
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
<li>scoped_lock()
-: <a class="el" href="a00220.html#a1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a1">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a1">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a1">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a1">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a1">tbb::mutex::scoped_lock</a><li>seconds()
-: <a class="el" href="a00237.html#a2">tbb::tick_count::interval_t</a><li>self()
-: <a class="el" href="a00228.html#e3">tbb::task</a><li>set_affinity()
-: <a class="el" href="a00228.html#a24">tbb::task</a><li>set_capacity()
-: <a class="el" href="a00177.html#a9">tbb::concurrent_queue< T, A ></a><li>set_depth()
-: <a class="el" href="a00228.html#a11">tbb::task</a><li>set_ref_count()
-: <a class="el" href="a00228.html#a13">tbb::task</a><li>size()
-: <a class="el" href="a00182.html#a18">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00177.html#a6">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00174.html#a14">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00169.html#a4">tbb::blocked_range< Value ></a><li>spawn()
-: <a class="el" href="a00228.html#a15">tbb::task</a><li>spawn_and_wait_for_all()
-: <a class="el" href="a00228.html#a17">tbb::task</a><li>spawn_root_and_wait()
-: <a class="el" href="a00228.html#e2">tbb::task</a><li>spin_mutex()
-: <a class="el" href="a00217.html#a0">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
-: <a class="el" href="a00219.html#a0">tbb::spin_rw_mutex_v3</a><li>start_routine()
-: <a class="el" href="a00235.html#e0">tbb::internal::thread_closure_1< F, X ></a><li>state()
-: <a class="el" href="a00228.html#a21">tbb::task</a><li>swap()
-: <a class="el" href="a00182.html#a39">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00174.html#a18">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
+: <a class="el" href="a00253.html#a1">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a1">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a1">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a1">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a1">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a1">tbb::mutex::scoped_lock</a><li>seconds()
+: <a class="el" href="a00273.html#a2">tbb::tick_count::interval_t</a><li>self()
+: <a class="el" href="a00261.html#e4">tbb::task</a><li>set_affinity()
+: <a class="el" href="a00261.html#a24">tbb::task</a><li>set_capacity()
+: <a class="el" href="a00204.html#a9">tbb::concurrent_queue< T, A ></a><li>set_depth()
+: <a class="el" href="a00261.html#a11">tbb::task</a><li>set_ref_count()
+: <a class="el" href="a00261.html#a13">tbb::task</a><li>size()
+: <a class="el" href="a00209.html#a18">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00204.html#a6">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00201.html#a14">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>, <a class="el" href="a00195.html#a4">tbb::blocked_range< Value ></a><li>spawn()
+: <a class="el" href="a00261.html#a15">tbb::task</a><li>spawn_and_wait_for_all()
+: <a class="el" href="a00261.html#a17">tbb::task</a><li>spawn_root_and_wait()
+: <a class="el" href="a00261.html#e3">tbb::task</a><li>spin_mutex()
+: <a class="el" href="a00250.html#a0">tbb::spin_mutex</a><li>spin_rw_mutex_v3()
+: <a class="el" href="a00252.html#a0">tbb::spin_rw_mutex_v3</a><li>start_routine()
+: <a class="el" href="a00271.html#e0">tbb::internal::thread_closure_1< F, X ></a><li>state()
+: <a class="el" href="a00261.html#a21">tbb::task</a><li>swap()
+: <a class="el" href="a00209.html#a39">tbb::concurrent_vector< T, A ></a>, <a class="el" href="a00201.html#a18">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a></ul>
<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
<li>task()
-: <a class="el" href="a00228.html#b0">tbb::task</a><li>task_list()
-: <a class="el" href="a00229.html#a0">tbb::task_list</a><li>task_scheduler_init()
-: <a class="el" href="a00231.html#a3">tbb::task_scheduler_init</a><li>tbb_thread_v3()
-: <a class="el" href="a00234.html#a3">tbb::internal::tbb_thread_v3</a><li>terminate()
-: <a class="el" href="a00231.html#a2">tbb::task_scheduler_init</a><li>tick_count()
-: <a class="el" href="a00236.html#a0">tbb::tick_count</a><li>try_acquire()
-: <a class="el" href="a00220.html#a7">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a3">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a4">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a4">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a4">tbb::mutex::scoped_lock</a></ul>
+: <a class="el" href="a00261.html#b0">tbb::task</a><li>task_group_context()
+: <a class="el" href="a00262.html#a0">tbb::task_group_context</a><li>task_list()
+: <a class="el" href="a00263.html#a0">tbb::task_list</a><li>task_scheduler_init()
+: <a class="el" href="a00265.html#a3">tbb::task_scheduler_init</a><li>tbb_thread_v3()
+: <a class="el" href="a00270.html#a3">tbb::internal::tbb_thread_v3</a><li>terminate()
+: <a class="el" href="a00265.html#a2">tbb::task_scheduler_init</a><li>throw_self()
+: <a class="el" href="a00226.html#a10">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a6">tbb::captured_exception</a>, <a class="el" href="a00268.html#a2">tbb::tbb_exception</a><li>tick_count()
+: <a class="el" href="a00272.html#a0">tbb::tick_count</a><li>try_acquire()
+: <a class="el" href="a00253.html#a7">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a3">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a4">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a4">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a4">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a4">tbb::mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
<li>upgrade_to_writer()
-: <a class="el" href="a00220.html#a4">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00211.html#a6">tbb::queuing_rw_mutex::scoped_lock</a></ul>
+: <a class="el" href="a00253.html#a4">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00241.html#a6">tbb::queuing_rw_mutex::scoped_lock</a></ul>
<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
<li>vector_iterator()
-: <a class="el" href="a00238.html#a0">tbb::internal::vector_iterator< Container, Value ></a></ul>
+: <a class="el" href="a00274.html#a1">tbb::internal::vector_iterator< Container, Value ></a></ul>
<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
<li>wait_for_all()
-: <a class="el" href="a00228.html#a18">tbb::task</a></ul>
+: <a class="el" href="a00261.html#a18">tbb::task</a><li>what()
+: <a class="el" href="a00226.html#a7">tbb::movable_exception< ExceptionData ></a>, <a class="el" href="a00200.html#a8">tbb::captured_exception</a>, <a class="el" href="a00268.html#a4">tbb::tbb_exception</a></ul>
<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
<li>~concurrent_hash_map()
-: <a class="el" href="a00174.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>~concurrent_queue()
-: <a class="el" href="a00177.html#a1">tbb::concurrent_queue< T, A ></a><li>~concurrent_queue_iterator_base_v3()
-: <a class="el" href="a00181.html#b5">tbb::internal::concurrent_queue_iterator_base_v3</a><li>~concurrent_vector()
-: <a class="el" href="a00182.html#a41">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
-: <a class="el" href="a00176.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>~filter()
-: <a class="el" href="a00189.html#a2">tbb::filter</a><li>~parallel_while()
-: <a class="el" href="a00204.html#a1">tbb::parallel_while< Body ></a><li>~pipeline()
-: <a class="el" href="a00206.html#a1">tbb::pipeline</a><li>~queuing_rw_mutex()
-: <a class="el" href="a00210.html#a1">tbb::queuing_rw_mutex</a><li>~scoped_lock()
-: <a class="el" href="a00220.html#a2">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00218.html#a5">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00215.html#a2">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00211.html#a2">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00209.html#a2">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00199.html#a2">tbb::mutex::scoped_lock</a><li>~task()
-: <a class="el" href="a00228.html#a0">tbb::task</a><li>~task_list()
-: <a class="el" href="a00229.html#a1">tbb::task_list</a><li>~task_scheduler_init()
-: <a class="el" href="a00231.html#a4">tbb::task_scheduler_init</a></ul>
+: <a class="el" href="a00201.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a><li>~concurrent_queue()
+: <a class="el" href="a00204.html#a1">tbb::concurrent_queue< T, A ></a><li>~concurrent_queue_iterator_base_v3()
+: <a class="el" href="a00208.html#b5">tbb::internal::concurrent_queue_iterator_base_v3</a><li>~concurrent_vector()
+: <a class="el" href="a00209.html#a41">tbb::concurrent_vector< T, A ></a><li>~const_accessor()
+: <a class="el" href="a00203.html#a5">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a><li>~filter()
+: <a class="el" href="a00216.html#a3">tbb::filter</a><li>~parallel_while()
+: <a class="el" href="a00234.html#a1">tbb::parallel_while< Body ></a><li>~pipeline()
+: <a class="el" href="a00236.html#a1">tbb::pipeline</a><li>~queuing_rw_mutex()
+: <a class="el" href="a00240.html#a1">tbb::queuing_rw_mutex</a><li>~scoped_lock()
+: <a class="el" href="a00253.html#a2">tbb::spin_rw_mutex_v3::scoped_lock</a>, <a class="el" href="a00251.html#a5">tbb::spin_mutex::scoped_lock</a>, <a class="el" href="a00246.html#a2">tbb::recursive_mutex::scoped_lock</a>, <a class="el" href="a00241.html#a2">tbb::queuing_rw_mutex::scoped_lock</a>, <a class="el" href="a00239.html#a2">tbb::queuing_mutex::scoped_lock</a>, <a class="el" href="a00228.html#a2">tbb::mutex::scoped_lock</a><li>~spin_rw_mutex_v3()
+: <a class="el" href="a00252.html#a1">tbb::spin_rw_mutex_v3</a><li>~task()
+: <a class="el" href="a00261.html#a0">tbb::task</a><li>~task_list()
+: <a class="el" href="a00263.html#a1">tbb::task_list</a><li>~task_scheduler_init()
+: <a class="el" href="a00265.html#a4">tbb::task_scheduler_init</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_rela.html b/doc/html/functions_rela.html
index 2ff3fe0..a706a26 100644
--- a/doc/html/functions_rela.html
+++ b/doc/html/functions_rela.html
@@ -4,17 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindexHL" href="functions_rela.html">Related Functions</a></div>
<p>
<ul>
<li>operator+
-: <a class="el" href="a00237.html#n2">tbb::tick_count::interval_t</a><li>operator-
-: <a class="el" href="a00236.html#n0">tbb::tick_count</a>, <a class="el" href="a00237.html#n3">tbb::tick_count::interval_t</a></ul>
+: <a class="el" href="a00273.html#n2">tbb::tick_count::interval_t</a><li>operator-
+: <a class="el" href="a00272.html#n0">tbb::tick_count</a>, <a class="el" href="a00273.html#n3">tbb::tick_count::interval_t</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_type.html b/doc/html/functions_type.html
index dc7f40b..62b8833 100644
--- a/doc/html/functions_type.html
+++ b/doc/html/functions_type.html
@@ -4,29 +4,29 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a> | <a class="qindexHL" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<p>
<ul>
<li>affinity_id
-: <a class="el" href="a00228.html#w1">tbb::task</a><li>allocator_type
-: <a class="el" href="a00232.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00177.html#w1">tbb::concurrent_queue< T, A ></a><li>const_iterator
-: <a class="el" href="a00169.html#w0">tbb::blocked_range< Value ></a><li>const_reference
-: <a class="el" href="a00177.html#w3">tbb::concurrent_queue< T, A ></a><li>depth_type
-: <a class="el" href="a00228.html#w0">tbb::task</a><li>difference_type
-: <a class="el" href="a00177.html#w5">tbb::concurrent_queue< T, A ></a><li>hashcode_t
-: <a class="el" href="a00195.html#w3">tbb::internal::hash_map_base</a><li>internal_array_op1
-: <a class="el" href="a00183.html#x2">tbb::internal::concurrent_vector_base_v3</a><li>internal_array_op2
-: <a class="el" href="a00183.html#x3">tbb::internal::concurrent_vector_base_v3</a><li>page_range_type
-: <a class="el" href="a00171.html#w0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
-: <a class="el" href="a00177.html#w2">tbb::concurrent_queue< T, A ></a><li>row_range_type
-: <a class="el" href="a00170.html#w0">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
-: <a class="el" href="a00177.html#w4">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00197.html#w0">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00169.html#w1">tbb::blocked_range< Value ></a><li>value_type
-: <a class="el" href="a00204.html#w0">tbb::parallel_while< Body ></a>, <a class="el" href="a00177.html#w0">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00175.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00176.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></ul>
+: <a class="el" href="a00261.html#w1">tbb::task</a><li>allocator_type
+: <a class="el" href="a00266.html#e0">tbb::tbb_allocator< T ></a>, <a class="el" href="a00204.html#w1">tbb::concurrent_queue< T, A ></a><li>const_iterator
+: <a class="el" href="a00195.html#w0">tbb::blocked_range< Value ></a><li>const_reference
+: <a class="el" href="a00204.html#w3">tbb::concurrent_queue< T, A ></a><li>depth_type
+: <a class="el" href="a00261.html#w0">tbb::task</a><li>difference_type
+: <a class="el" href="a00204.html#w5">tbb::concurrent_queue< T, A ></a><li>hashcode_t
+: <a class="el" href="a00222.html#w3">tbb::internal::hash_map_base</a><li>internal_array_op1
+: <a class="el" href="a00210.html#x2">tbb::internal::concurrent_vector_base_v3</a><li>internal_array_op2
+: <a class="el" href="a00210.html#x3">tbb::internal::concurrent_vector_base_v3</a><li>page_range_type
+: <a class="el" href="a00197.html#w0">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a><li>reference
+: <a class="el" href="a00204.html#w2">tbb::concurrent_queue< T, A ></a><li>row_range_type
+: <a class="el" href="a00196.html#w0">tbb::blocked_range2d< RowValue, ColValue ></a><li>size_type
+: <a class="el" href="a00204.html#w4">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00224.html#w0">tbb::internal::hash_map_range< Iterator ></a>, <a class="el" href="a00195.html#w1">tbb::blocked_range< Value ></a><li>value_type
+: <a class="el" href="a00234.html#w0">tbb::parallel_while< Body ></a>, <a class="el" href="a00204.html#w0">tbb::concurrent_queue< T, A ></a>, <a class="el" href="a00202.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>, <a class="el" href="a00203.html#w0">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index aa6bdd5..d697b0f 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -4,29 +4,30 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindexHL" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindexHL" href="functions_vars.html">Variables</a> | <a class="qindex" href="functions_type.html">Typedefs</a> | <a class="qindex" href="functions_enum.html">Enumerations</a> | <a class="qindex" href="functions_eval.html">Enumeration values</a> | <a class="qindex" href="functions_rela.html">Related Functions</a></div>
<p>
<ul>
<li>automatic
-: <a class="el" href="a00231.html#s0">tbb::task_scheduler_init</a><li>deferred
-: <a class="el" href="a00231.html#s1">tbb::task_scheduler_init</a><li>item_size
-: <a class="el" href="a00178.html#p2">tbb::internal::concurrent_queue_base_v3</a><li>items_per_page
-: <a class="el" href="a00178.html#p1">tbb::internal::concurrent_queue_base_v3</a><li>max_physical_size
-: <a class="el" href="a00195.html#s2">tbb::internal::hash_map_base</a><li>my_capacity
-: <a class="el" href="a00178.html#p0">tbb::internal::concurrent_queue_base_v3</a><li>my_early_size
-: <a class="el" href="a00183.html#p2">tbb::internal::concurrent_vector_base_v3</a><li>my_first_block
-: <a class="el" href="a00183.html#p1">tbb::internal::concurrent_vector_base_v3</a><li>my_item
-: <a class="el" href="a00181.html#p0">tbb::internal::concurrent_queue_iterator_base_v3</a><li>my_segment
-: <a class="el" href="a00183.html#p3">tbb::internal::concurrent_vector_base_v3</a><li>my_storage
-: <a class="el" href="a00183.html#p4">tbb::internal::concurrent_vector_base_v3</a><li>n_segment
-: <a class="el" href="a00195.html#s1">tbb::internal::hash_map_base</a><li>n_segment_bits
-: <a class="el" href="a00195.html#s0">tbb::internal::hash_map_base</a><li>vector_allocator_ptr
-: <a class="el" href="a00183.html#p0">tbb::internal::concurrent_vector_base_v3</a></ul>
+: <a class="el" href="a00265.html#s0">tbb::task_scheduler_init</a><li>deferred
+: <a class="el" href="a00265.html#s1">tbb::task_scheduler_init</a><li>item_size
+: <a class="el" href="a00205.html#p2">tbb::internal::concurrent_queue_base_v3</a><li>items_per_page
+: <a class="el" href="a00205.html#p1">tbb::internal::concurrent_queue_base_v3</a><li>max_physical_size
+: <a class="el" href="a00222.html#s2">tbb::internal::hash_map_base</a><li>my_capacity
+: <a class="el" href="a00205.html#p0">tbb::internal::concurrent_queue_base_v3</a><li>my_early_size
+: <a class="el" href="a00210.html#p2">tbb::internal::concurrent_vector_base_v3</a><li>my_exception_data
+: <a class="el" href="a00226.html#p0">tbb::movable_exception< ExceptionData ></a><li>my_first_block
+: <a class="el" href="a00210.html#p1">tbb::internal::concurrent_vector_base_v3</a><li>my_item
+: <a class="el" href="a00208.html#p0">tbb::internal::concurrent_queue_iterator_base_v3</a><li>my_segment
+: <a class="el" href="a00210.html#p3">tbb::internal::concurrent_vector_base_v3</a><li>my_storage
+: <a class="el" href="a00210.html#p4">tbb::internal::concurrent_vector_base_v3</a><li>n_segment
+: <a class="el" href="a00222.html#s1">tbb::internal::hash_map_base</a><li>n_segment_bits
+: <a class="el" href="a00222.html#s0">tbb::internal::hash_map_base</a><li>vector_allocator_ptr
+: <a class="el" href="a00210.html#p0">tbb::internal::concurrent_vector_base_v3</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_do_body_req.html b/doc/html/globals.html
similarity index 51%
copy from doc/html/parallel_do_body_req.html
copy to doc/html/globals.html
index f719380..a25f050 100644
--- a/doc/html/parallel_do_body_req.html
+++ b/doc/html/globals.html
@@ -1,28 +1,26 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Requirements on parallel_do body</title>
+<title>File Members</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1><a class="anchor" name="parallel_do_body_req">Requirements on parallel_do body</a></h1>Class <code>Body</code> implementing the concept of parallel_do body must define:<ul>
-<li><div class="fragment"><pre class="fragment"> B::operator()(
- cv_item_type item,
- parallel_do_feeder<item_type>& feeder
- ) <span class="keyword">const</span>
-
- OR
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindexHL" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a></div>
- B::operator()( cv_item_type& item ) <span class="keyword">const</span>
-</pre></div>Process item. May be invoked concurrently for the same <code>this</code> but different <code>item</code>.</li></ul>
<p>
-<ul>
-<li><div class="fragment"><pre class="fragment"> item_type( <span class="keyword">const</span> item_type& )
-</pre></div>Copy a work item.</li><li><div class="fragment"><pre class="fragment"> ~item_type()
-</pre></div>Destroy a work item </li></ul>
+Here is a list of all documented file members with links to the documentation:<ul>
+<li>scalable_aligned_free()
+: <a class="el" href="a00304.html#a7">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00304.html#a5">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00304.html#a6">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00304.html#a3">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00304.html#a1">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00304.html#a0">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00304.html#a4">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00304.html#a2">scalable_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_do_body_req.html b/doc/html/globals_func.html
similarity index 52%
copy from doc/html/parallel_do_body_req.html
copy to doc/html/globals_func.html
index f719380..ad1a9c6 100644
--- a/doc/html/parallel_do_body_req.html
+++ b/doc/html/globals_func.html
@@ -1,28 +1,26 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Requirements on parallel_do body</title>
+<title>File Members - Functions</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1><a class="anchor" name="parallel_do_body_req">Requirements on parallel_do body</a></h1>Class <code>Body</code> implementing the concept of parallel_do body must define:<ul>
-<li><div class="fragment"><pre class="fragment"> B::operator()(
- cv_item_type item,
- parallel_do_feeder<item_type>& feeder
- ) <span class="keyword">const</span>
-
- OR
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a></div>
- B::operator()( cv_item_type& item ) <span class="keyword">const</span>
-</pre></div>Process item. May be invoked concurrently for the same <code>this</code> but different <code>item</code>.</li></ul>
<p>
<ul>
-<li><div class="fragment"><pre class="fragment"> item_type( <span class="keyword">const</span> item_type& )
-</pre></div>Copy a work item.</li><li><div class="fragment"><pre class="fragment"> ~item_type()
-</pre></div>Destroy a work item </li></ul>
+<li>scalable_aligned_free()
+: <a class="el" href="a00304.html#a7">scalable_allocator.h</a><li>scalable_aligned_malloc()
+: <a class="el" href="a00304.html#a5">scalable_allocator.h</a><li>scalable_aligned_realloc()
+: <a class="el" href="a00304.html#a6">scalable_allocator.h</a><li>scalable_calloc()
+: <a class="el" href="a00304.html#a3">scalable_allocator.h</a><li>scalable_free()
+: <a class="el" href="a00304.html#a1">scalable_allocator.h</a><li>scalable_malloc()
+: <a class="el" href="a00304.html#a0">scalable_allocator.h</a><li>scalable_posix_memalign()
+: <a class="el" href="a00304.html#a4">scalable_allocator.h</a><li>scalable_realloc()
+: <a class="el" href="a00304.html#a2">scalable_allocator.h</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/graph_legend.html b/doc/html/graph_legend.html
index 8c8e9d9..347cf3f 100644
--- a/doc/html/graph_legend.html
+++ b/doc/html/graph_legend.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>Graph Legend</h1>This page explains how to interpret the graphs that are generated by doxygen.<p>
Consider the following example: <div class="fragment"><pre class="fragment"><span class="comment">/*! Invisible class because of truncation */</span>
<span class="keyword">class </span>Invisible { };
@@ -69,7 +69,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
</ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
index fe2c92a..d7e7024 100644
--- a/doc/html/hierarchy.html
+++ b/doc/html/hierarchy.html
@@ -4,112 +4,127 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindexHL" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindexHL" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
-<li><a class="el" href="a00164.html">tbb::aligned_space< T, N ></a>
-<li><b>tbb::internal::allocate_additional_child_of_proxy</b><li><b>tbb::internal::allocate_child_proxy</b><li><b>tbb::internal::allocate_continuation_proxy</b><li><b>tbb::internal::allocate_root_proxy</b><li><b>tbb::internal::allocator_base< T, A ></b><li><a class="el" href="a00165.html">tbb::atomic< T ></a>
-<li><b>tbb::atomic< bool ></b><li><b>tbb::atomic< T * ></b><li><b>tbb::atomic< void * ></b><li><b>tbb::internal::atomic_base< I ></b><li><b>tbb::internal::atomic_base< int64_t ></b><li><b>tbb::internal::atomic_base< uint64_t ></b><li><b>tbb::internal::atomic_impl< I, D, Step ></b><li><b>tbb::internal::atomic_traits< Size, M ></b><li><b>tbb::internal::atomic_word< Size ></b><li><b>tbb::internal::atomic_word< 8 ></b><li><a class=" [...]
-<li><a class="el" href="a00167.html">tbb::auto_partitioner</a>
-<li><a class="el" href="a00168.html">tbb::bad_last_alloc</a>
-<li><a class="el" href="a00169.html">tbb::blocked_range< Value ></a>
-<li><a class="el" href="a00170.html">tbb::blocked_range2d< RowValue, ColValue ></a>
-<li><a class="el" href="a00171.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
-<li><a class="el" href="a00169.html">tbb::blocked_range< I ></a>
-<li><a class="el" href="a00172.html">tbb::cache_aligned_allocator< T ></a>
-<li><b>tbb::cache_aligned_allocator< T >::rebind< U ></b><li><a class="el" href="a00173.html">tbb::cache_aligned_allocator< void ></a>
-<li><b>tbb::cache_aligned_allocator< void >::rebind< U ></b><li><a class="el" href="a00176.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
+<li><b>tbb::internal::__TBB_machine_type_with_strictest_alignment</b><li><a class="el" href="a00190.html">tbb::aligned_space< T, N ></a>
+<li><b>tbb::internal::allocator_base< T, A ></b><li><a class="el" href="a00191.html">tbb::atomic< T ></a>
+<li><b>tbb::atomic< bool ></b><li><b>tbb::atomic< void * ></b><li><b>tbb::internal::atomic_base< I ></b><li><b>tbb::internal::atomic_base< int64_t ></b><li><b>tbb::internal::atomic_base< uint64_t ></b><li><b>tbb::internal::atomic_impl</b><li><b>tbb::internal::atomic_traits< Size, M ></b><li><b>tbb::internal::atomic_word< Size ></b><li><b>tbb::internal::atomic_word< 1 ></b><li><b>tbb::internal::atomic_word< 2 ></b><li><b>tbb::internal: [...]
+<li><a class="el" href="a00193.html">tbb::auto_partitioner</a>
+<li><a class="el" href="a00194.html">tbb::bad_last_alloc</a>
+<li><a class="el" href="a00195.html">tbb::blocked_range< Value ></a>
+<li><a class="el" href="a00196.html">tbb::blocked_range2d< RowValue, ColValue ></a>
+<li><a class="el" href="a00197.html">tbb::blocked_range3d< PageValue, RowValue, ColValue ></a>
+<li><a class="el" href="a00195.html">tbb::blocked_range< I ></a>
+<li><a class="el" href="a00198.html">tbb::cache_aligned_allocator< T ></a>
+<li><b>tbb::cache_aligned_allocator< T >::rebind< U ></b><li><a class="el" href="a00199.html">tbb::cache_aligned_allocator< void ></a>
+<li><b>tbb::cache_aligned_allocator< void >::rebind< U ></b><li><a class="el" href="a00203.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::const_accessor</a>
<ul>
-<li><a class="el" href="a00175.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
+<li><a class="el" href="a00202.html">tbb::concurrent_hash_map< Key, T, HashCompare, A >::accessor</a>
</ul>
-<li><a class="el" href="a00179.html">tbb::internal::concurrent_queue_base_v3::page</a>
-<li><a class="el" href="a00181.html">tbb::internal::concurrent_queue_iterator_base_v3</a>
+<li><a class="el" href="a00206.html">tbb::internal::concurrent_queue_base_v3::page</a>
+<li><a class="el" href="a00208.html">tbb::internal::concurrent_queue_iterator_base_v3</a>
<ul>
-<li><a class="el" href="a00180.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>
+<li><a class="el" href="a00207.html">tbb::internal::concurrent_queue_iterator< Container, Value ></a>
</ul>
-<li><a class="el" href="a00183.html">tbb::internal::concurrent_vector_base_v3</a>
+<li><a class="el" href="a00210.html">tbb::internal::concurrent_vector_base_v3</a>
<ul>
-<li><a class="el" href="a00182.html">tbb::concurrent_vector< T, A ></a>
+<li><a class="el" href="a00209.html">tbb::concurrent_vector< T, A ></a>
</ul>
-<li><a class="el" href="a00184.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>
-<li><b>tbb::internal::concurrent_vector_base_v3::segment_t</b><li><a class="el" href="a00189.html">tbb::filter</a>
-<li><a class="el" href="a00190.html">tbb::final_scan_tag</a>
-<li><a class="el" href="a00195.html">tbb::internal::hash_map_base</a>
+<li><a class="el" href="a00211.html">tbb::internal::concurrent_vector_base_v3::internal_segments_table</a>
+<li><b>tbb::internal::concurrent_vector_base_v3::segment_t</b><li><b>tbb::internal::context_list_node_t</b><li><a class="el" href="a00217.html">tbb::final_scan_tag</a>
+<li><a class="el" href="a00222.html">tbb::internal::hash_map_base</a>
<ul>
-<li><a class="el" href="a00174.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>
+<li><a class="el" href="a00201.html">tbb::concurrent_hash_map< Key, T, HashCompare, A ></a>
</ul>
-<li><a class="el" href="a00196.html">tbb::internal::hash_map_iterator< Container, Value ></a>
-<li><a class="el" href="a00197.html">tbb::internal::hash_map_range< Iterator ></a>
-<li><b>tbb::internal::hash_map_segment_base</b><li><a class="el" href="a00198.html">tbb::mutex</a>
-<li><a class="el" href="a00200.html">tbb::internal::no_copy</a>
+<li><a class="el" href="a00223.html">tbb::internal::hash_map_iterator< Container, Value ></a>
+<li><a class="el" href="a00224.html">tbb::internal::hash_map_range< Iterator ></a>
+<li><b>tbb::internal::hash_map_segment_base</b><li><a class="el" href="a00225.html">tbb::internal::lambda_reduce_body< Range, Value, RealBody, Reduction ></a>
+<li><a class="el" href="a00227.html">tbb::mutex</a>
+<li><a class="el" href="a00229.html">tbb::internal::no_assign</a>
<ul>
-<li><b>tbb::internal::affinity_partition_type</b><li><a class="el" href="a00163.html">tbb::internal::affinity_partitioner_base_v3</a>
+<li><b>tbb::internal::allocate_additional_child_of_proxy</b><li><b>tbb::internal::allocate_child_proxy</b><li><b>tbb::internal::allocate_continuation_proxy</b><li><b>tbb::internal::allocate_root_proxy</b><li><b>tbb::internal::allocate_root_with_context_proxy</b><li><a class="el" href="a00230.html">tbb::internal::no_copy</a>
<ul>
-<li><a class="el" href="a00162.html">tbb::affinity_partitioner</a>
+<li><a class="el" href="a00216.html">tbb::filter</a>
+<li><b>tbb::internal::affinity_partition_type</b><li><a class="el" href="a00189.html">tbb::internal::affinity_partitioner_base_v3</a>
+<ul>
+<li><a class="el" href="a00188.html">tbb::affinity_partitioner</a>
</ul>
-<li><a class="el" href="a00178.html">tbb::internal::concurrent_queue_base_v3</a>
+<li><a class="el" href="a00205.html">tbb::internal::concurrent_queue_base_v3</a>
<ul>
-<li><a class="el" href="a00177.html">tbb::concurrent_queue< T, A ></a>
+<li><a class="el" href="a00204.html">tbb::concurrent_queue< T, A ></a>
</ul>
-<li><a class="el" href="a00199.html">tbb::mutex::scoped_lock</a>
-<li><a class="el" href="a00201.html">tbb::parallel_do_feeder< Item ></a>
+<li><b>tbb::internal::scheduler</b><li><a class="el" href="a00228.html">tbb::mutex::scoped_lock</a>
+<li><a class="el" href="a00231.html">tbb::parallel_do_feeder< Item ></a>
<ul>
-<li><a class="el" href="a00202.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>
+<li><a class="el" href="a00232.html">tbb::internal::parallel_do_feeder_impl< Body, Item ></a>
</ul>
-<li><a class="el" href="a00204.html">tbb::parallel_while< Body ></a>
-<li><a class="el" href="a00209.html">tbb::queuing_mutex::scoped_lock</a>
-<li><a class="el" href="a00211.html">tbb::queuing_rw_mutex::scoped_lock</a>
-<li><a class="el" href="a00215.html">tbb::recursive_mutex::scoped_lock</a>
-<li><a class="el" href="a00218.html">tbb::spin_mutex::scoped_lock</a>
-<li><a class="el" href="a00220.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
-<li><a class="el" href="a00228.html">tbb::task</a>
+<li><a class="el" href="a00234.html">tbb::parallel_while< Body ></a>
+<li><a class="el" href="a00239.html">tbb::queuing_mutex::scoped_lock</a>
+<li><a class="el" href="a00241.html">tbb::queuing_rw_mutex::scoped_lock</a>
+<li><a class="el" href="a00246.html">tbb::recursive_mutex::scoped_lock</a>
+<li><a class="el" href="a00251.html">tbb::spin_mutex::scoped_lock</a>
+<li><a class="el" href="a00253.html">tbb::spin_rw_mutex_v3::scoped_lock</a>
+<li><a class="el" href="a00261.html">tbb::task</a>
<ul>
-<li><a class="el" href="a00188.html">tbb::empty_task</a>
-<li><a class="el" href="a00185.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>
-<li><b>tbb::internal::do_group_task_input</b><li><a class="el" href="a00186.html">tbb::internal::do_iteration_task< Body, Item ></a>
-<li><b>tbb::internal::do_iteration_task_iter</b><li><a class="el" href="a00187.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>
-<li><a class="el" href="a00191.html">tbb::internal::final_sum< Range, Body ></a>
-<li><a class="el" href="a00192.html">tbb::internal::finish_reduce< Body ></a>
-<li><a class="el" href="a00193.html">tbb::internal::finish_reduce_with_affinity< Body ></a>
-<li><a class="el" href="a00194.html">tbb::internal::finish_scan< Range, Body ></a>
-<li><a class="el" href="a00222.html">tbb::internal::start_for< Range, Body, Partitioner ></a>
-<li><a class="el" href="a00223.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>
-<li><a class="el" href="a00224.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>
-<li><a class="el" href="a00225.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>
-<li><a class="el" href="a00227.html">tbb::internal::sum_node< Range, Body ></a>
-<li><a class="el" href="a00240.html">tbb::internal::while_group_task< Body ></a>
-<li><a class="el" href="a00241.html">tbb::internal::while_iteration_task< Body ></a>
-<li><a class="el" href="a00242.html">tbb::internal::while_task< Stream, Body ></a>
+<li><a class="el" href="a00215.html">tbb::empty_task</a>
+<li><a class="el" href="a00212.html">tbb::internal::do_group_task_forward< Iterator, Body, Item ></a>
+<li><b>tbb::internal::do_group_task_input</b><li><a class="el" href="a00213.html">tbb::internal::do_iteration_task< Body, Item ></a>
+<li><b>tbb::internal::do_iteration_task_iter</b><li><a class="el" href="a00214.html">tbb::internal::do_task_iter< Iterator, Body, Item ></a>
+<li><a class="el" href="a00218.html">tbb::internal::final_sum< Range, Body ></a>
+<li><a class="el" href="a00219.html">tbb::internal::finish_reduce< Body ></a>
+<li><a class="el" href="a00220.html">tbb::internal::finish_reduce_with_affinity< Body ></a>
+<li><a class="el" href="a00221.html">tbb::internal::finish_scan< Range, Body ></a>
+<li><a class="el" href="a00255.html">tbb::internal::start_for< Range, Body, Partitioner ></a>
+<li><a class="el" href="a00256.html">tbb::internal::start_reduce< Range, Body, Partitioner ></a>
+<li><a class="el" href="a00257.html">tbb::internal::start_reduce_with_affinity< Range, Body ></a>
+<li><a class="el" href="a00258.html">tbb::internal::start_scan< Range, Body, Partitioner ></a>
+<li><a class="el" href="a00260.html">tbb::internal::sum_node< Range, Body ></a>
+<li><a class="el" href="a00276.html">tbb::internal::while_group_task< Body ></a>
+<li><a class="el" href="a00277.html">tbb::internal::while_iteration_task< Body ></a>
+<li><a class="el" href="a00278.html">tbb::internal::while_task< Stream, Body ></a>
+</ul>
+<li><a class="el" href="a00262.html">tbb::task_group_context</a>
+<li><a class="el" href="a00263.html">tbb::task_list</a>
+<li><a class="el" href="a00265.html">tbb::task_scheduler_init</a>
</ul>
-<li><a class="el" href="a00229.html">tbb::task_list</a>
-<li><a class="el" href="a00231.html">tbb::task_scheduler_init</a>
+<li><a class="el" href="a00243.html">tbb::internal::quick_sort_pretest_body< RandomAccessIterator, Compare ></a>
+<li><a class="el" href="a00244.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>
+</ul>
+<li><b>tbb::null_mutex</b><li><b>tbb::null_mutex::scoped_lock</b><li><b>tbb::null_rw_mutex</b><li><b>tbb::null_rw_mutex::scoped_lock</b><li><a class="el" href="a00233.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>
+<li><a class="el" href="a00235.html">tbb::internal::partition_type_base</a>
+<li><a class="el" href="a00236.html">tbb::pipeline</a>
+<li><a class="el" href="a00237.html">tbb::pre_scan_tag</a>
+<li><a class="el" href="a00238.html">tbb::queuing_mutex</a>
+<li><a class="el" href="a00240.html">tbb::queuing_rw_mutex</a>
+<li><a class="el" href="a00242.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>
+<li><a class="el" href="a00245.html">tbb::recursive_mutex</a>
+<li><a class="el" href="a00247.html">tbb::scalable_allocator< T ></a>
+<li><b>tbb::scalable_allocator< T >::rebind< U ></b><li><a class="el" href="a00248.html">tbb::scalable_allocator< void ></a>
+<li><b>tbb::scalable_allocator< void >::rebind< U ></b><li><a class="el" href="a00249.html">tbb::simple_partitioner</a>
+<li><a class="el" href="a00250.html">tbb::spin_mutex</a>
+<li><a class="el" href="a00252.html">tbb::spin_rw_mutex_v3</a>
+<li><a class="el" href="a00254.html">tbb::split</a>
+<li><a class="el" href="a00259.html">tbb::internal::strip< T ></a>
+<li><b>tbb::internal::strip< const T & ></b><li><b>tbb::internal::strip< const T ></b><li><b>tbb::internal::strip< const volatile T & ></b><li><b>tbb::internal::strip< const volatile T ></b><li><b>tbb::internal::strip< T & ></b><li><b>tbb::internal::strip< volatile T & ></b><li><b>tbb::internal::strip< volatile T ></b><li><a class="el" href="a00264.html">tbb::internal::task_prefix</a>
+<li><b>tbb::internal::task_scheduler_observer_v3</b><li><a class="el" href="a00266.html">tbb::tbb_allocator< T ></a>
+<li><b>tbb::tbb_allocator< T >::rebind< U ></b><li><a class="el" href="a00267.html">tbb::tbb_allocator< void ></a>
+<li><b>tbb::tbb_allocator< void >::rebind< U ></b><li><a class="el" href="a00268.html">tbb::tbb_exception</a>
+<ul>
+<li><a class="el" href="a00200.html">tbb::captured_exception</a>
+<li><a class="el" href="a00226.html">tbb::movable_exception< ExceptionData ></a>
</ul>
-<li><a class="el" href="a00203.html">tbb::internal::parallel_do_operator_selector< Body, Item ></a>
-<li><a class="el" href="a00205.html">tbb::internal::partition_type_base</a>
-<li><a class="el" href="a00206.html">tbb::pipeline</a>
-<li><a class="el" href="a00207.html">tbb::pre_scan_tag</a>
-<li><a class="el" href="a00208.html">tbb::queuing_mutex</a>
-<li><a class="el" href="a00210.html">tbb::queuing_rw_mutex</a>
-<li><a class="el" href="a00212.html">tbb::internal::quick_sort_body< RandomAccessIterator, Compare ></a>
-<li><a class="el" href="a00213.html">tbb::internal::quick_sort_range< RandomAccessIterator, Compare ></a>
-<li><a class="el" href="a00214.html">tbb::recursive_mutex</a>
-<li><b>tbb::internal::scheduler</b><li><a class="el" href="a00216.html">tbb::simple_partitioner</a>
-<li><a class="el" href="a00217.html">tbb::spin_mutex</a>
-<li><a class="el" href="a00219.html">tbb::spin_rw_mutex_v3</a>
-<li><a class="el" href="a00221.html">tbb::split</a>
-<li><a class="el" href="a00226.html">tbb::internal::strip< T ></a>
-<li><b>tbb::internal::strip< const T & ></b><li><b>tbb::internal::strip< const T ></b><li><b>tbb::internal::strip< const volatile T & ></b><li><b>tbb::internal::strip< const volatile T ></b><li><b>tbb::internal::strip< T & ></b><li><b>tbb::internal::strip< volatile T & ></b><li><b>tbb::internal::strip< volatile T ></b><li><a class="el" href="a00230.html">tbb::internal::task_prefix</a>
-<li><b>tbb::internal::task_scheduler_observer_v3</b><li><a class="el" href="a00232.html">tbb::tbb_allocator< T ></a>
-<li><b>tbb::tbb_allocator< T >::rebind< U ></b><li><a class="el" href="a00233.html">tbb::tbb_allocator< void ></a>
-<li><b>tbb::tbb_allocator< void >::rebind< U ></b><li><a class="el" href="a00234.html">tbb::internal::tbb_thread_v3</a>
-<li><b>tbb::internal::tbb_thread_v3::id</b><li><b>tbb::internal::thread_closure_0< F ></b><li><a class="el" href="a00235.html">tbb::internal::thread_closure_1< F, X ></a>
-<li><b>tbb::internal::thread_closure_2< F, X, Y ></b><li><b>tbb::internal::thread_closure_base</b><li><a class="el" href="a00236.html">tbb::tick_count</a>
-<li><a class="el" href="a00237.html">tbb::tick_count::interval_t</a>
-<li><b>tbb::internal::type_with_alignment< N ></b><li><b>tbb::internal::type_with_alignment< 1 ></b><li><b>tbb::internal::type_with_alignment< 2 ></b><li><b>tbb::internal::type_with_alignment< 4 ></b><li><b>tbb::internal::type_with_alignment< 8 ></b><li><a class="el" href="a00238.html">tbb::internal::vector_iterator< Container, Value ></a>
-<li><a class="el" href="a00239.html">tbb::internal::version_tag_v3</a>
+<li><a class="el" href="a00269.html">tbb::tbb_hash_compare< T ></a>
+<li><a class="el" href="a00270.html">tbb::internal::tbb_thread_v3</a>
+<li><b>tbb::internal::tbb_thread_v3::id</b><li><b>tbb::internal::thread_closure_0< F ></b><li><a class="el" href="a00271.html">tbb::internal::thread_closure_1< F, X ></a>
+<li><b>tbb::internal::thread_closure_2< F, X, Y ></b><li><b>tbb::internal::thread_closure_base</b><li><a class="el" href="a00272.html">tbb::tick_count</a>
+<li><a class="el" href="a00273.html">tbb::tick_count::interval_t</a>
+<li><b>tbb::internal::type_with_alignment< N ></b><li><b>tbb::internal::type_with_alignment< 1 ></b><li><b>tbb::internal::type_with_alignment< 2 ></b><li><b>tbb::internal::type_with_alignment< 4 ></b><li><b>tbb::internal::type_with_alignment< 8 ></b><li><a class="el" href="a00274.html">tbb::internal::vector_iterator< Container, Value ></a>
+<li><a class="el" href="a00275.html">tbb::internal::version_tag_v3</a>
+<li><a class="el" href="a00279.html">tbb::internal::work_around_alignment_bug< Size, T ></a>
</ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/index.html b/doc/html/index.html
index bf97f43..a686b8d 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindexHL" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindexHL" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>Main Page </h1>
<p>
Click the tabs above for information about the<ul>
@@ -14,7 +14,7 @@ Additional pieces of information can be found here<ul>
<li>concepts</li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/modules.html b/doc/html/modules.html
index e80a4f3..bb806ba 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -4,13 +4,13 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindexHL" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindexHL" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>Modules</h1>Here is a list of all modules:<ul>
-<li><a class="el" href="a00281.html">Algorithms</a>
+<li><a class="el" href="a00321.html">Algorithms</a>
</ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
index 0bde4df..ce109a8 100644
--- a/doc/html/namespacemembers.html
+++ b/doc/html/namespacemembers.html
@@ -4,71 +4,82 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindexHL" href="namespacemembers.html">All</a> | <a class="qindex" href="namespacemembers_func.html">Functions</a> | <a class="qindex" href="namespacemembers_vars.html">Variables</a> | <a class="qindex" href="namespacemembers_type.html">Typedefs</a> | <a class="qindex" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindex" href="namespacemembers_eval.html">Enumeration values</a></div>
-<div class="qindex"><a class="qindex" href="#index__">_</a> | <a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_r">r</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_t">t</a> | <a class=" [...]
+<div class="qindex"><a class="qindex" href="#index__">_</a> | <a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_h">h</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_r">r</a> | <a class="qindex" href="#index_s">s</a> | <a class=" [...]
<p>
<p>
Here is a list of all documented namespace members with links to the namespaces they belong to:<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
-<li>__TBB_full_fence
-: <a class="el" href="a00278.html#a37a0">tbb</a></ul>
+<li>__TBB_DECL_ATOMIC_PRIMITIVES()
+: <a class="el" href="a00319.html#a30">tbb::internal</a><li>__TBB_full_fence
+: <a class="el" href="a00318.html#a57a0">tbb</a></ul>
<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
<li>acquire
-: <a class="el" href="a00278.html#a37a1">tbb</a><li>affinity_id
-: <a class="el" href="a00279.html#a12">tbb::internal</a><li>allocate_closure_v3()
-: <a class="el" href="a00279.html#a54">tbb::internal</a><li>allocate_via_handler_v3()
-: <a class="el" href="a00279.html#a42">tbb::internal</a><li>assertion_handler_type
-: <a class="el" href="a00278.html#a6">tbb</a></ul>
+: <a class="el" href="a00318.html#a57a1">tbb</a><li>affinity_id
+: <a class="el" href="a00319.html#a11">tbb::internal</a><li>allocate_closure_v3()
+: <a class="el" href="a00319.html#a79">tbb::internal</a><li>allocate_via_handler_v3()
+: <a class="el" href="a00319.html#a62">tbb::internal</a><li>assertion_failure()
+: <a class="el" href="a00318.html#a52">tbb</a><li>assertion_handler_type
+: <a class="el" href="a00318.html#a6">tbb</a></ul>
<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
<li>deallocate_via_handler_v3()
-: <a class="el" href="a00279.html#a41">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a61">tbb::internal</a></ul>
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
<li>free_closure_v3()
-: <a class="el" href="a00279.html#a55">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a80">tbb::internal</a></ul>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>hash_multiplier
+: <a class="el" href="a00319.html#a3">tbb::internal</a><li>hashcode_t
+: <a class="el" href="a00319.html#a2">tbb::internal</a><li>hasher()
+: <a class="el" href="a00319.html#a36">tbb::internal</a></ul>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
<li>intptr
-: <a class="el" href="a00279.html#a14">tbb::internal</a><li>is_malloc_used_v3()
-: <a class="el" href="a00279.html#a43">tbb::internal</a><li>itt_load_pointer_with_acquire_v3()
-: <a class="el" href="a00279.html#a36">tbb::internal</a><li>itt_store_pointer_with_release_v3()
-: <a class="el" href="a00279.html#a35">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a22">tbb::internal</a><li>is_malloc_used_v3()
+: <a class="el" href="a00319.html#a63">tbb::internal</a><li>itt_load_pointer_v3()
+: <a class="el" href="a00319.html#a42">tbb::internal</a><li>itt_load_pointer_with_acquire_v3()
+: <a class="el" href="a00319.html#a56">tbb::internal</a><li>itt_store_pointer_with_release_v3()
+: <a class="el" href="a00319.html#a55">tbb::internal</a></ul>
<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
<li>memory_semantics
-: <a class="el" href="a00278.html#a37">tbb</a></ul>
+: <a class="el" href="a00318.html#a57">tbb</a></ul>
<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
<li>NFS_Allocate()
-: <a class="el" href="a00279.html#a17">tbb::internal</a><li>NFS_Free()
-: <a class="el" href="a00279.html#a18">tbb::internal</a><li>NFS_GetLineSize()
-: <a class="el" href="a00279.html#a16">tbb::internal</a><li>NFS_MaxLineSize
-: <a class="el" href="a00279.html#a0">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a32">tbb::internal</a><li>NFS_Free()
+: <a class="el" href="a00319.html#a33">tbb::internal</a><li>NFS_GetLineSize()
+: <a class="el" href="a00319.html#a31">tbb::internal</a><li>NFS_MaxLineSize
+: <a class="el" href="a00319.html#a1">tbb::internal</a></ul>
<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
<li>parallel_do()
-: <a class="el" href="a00281.html#ga3">tbb</a><li>parallel_for()
-: <a class="el" href="a00281.html#ga6">tbb</a><li>parallel_quick_sort()
-: <a class="el" href="a00281.html#ga12">tbb::internal</a><li>parallel_reduce()
-: <a class="el" href="a00281.html#ga9">tbb</a><li>parallel_scan()
-: <a class="el" href="a00281.html#ga11">tbb</a><li>parallel_sort()
-: <a class="el" href="a00281.html#ga15">tbb</a></ul>
+: <a class="el" href="a00321.html#ga4">tbb</a><li>parallel_for()
+: <a class="el" href="a00321.html#ga10">tbb</a><li>parallel_quick_sort()
+: <a class="el" href="a00321.html#ga25">tbb::internal</a><li>parallel_reduce()
+: <a class="el" href="a00321.html#ga22">tbb</a><li>parallel_scan()
+: <a class="el" href="a00321.html#ga24">tbb</a><li>parallel_sort()
+: <a class="el" href="a00321.html#ga28">tbb</a><li>poison_pointer()
+: <a class="el" href="a00319.html#a77">tbb::internal</a></ul>
<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
<li>reduction_context
-: <a class="el" href="a00279.html#a4">tbb::internal</a><li>reference_count
-: <a class="el" href="a00279.html#a11">tbb::internal</a><li>release
-: <a class="el" href="a00278.html#a37a2">tbb</a><li>run_parallel_do()
-: <a class="el" href="a00281.html#ga0">tbb::internal</a><li>runtime_warning()
-: <a class="el" href="a00279.html#a52">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a7">tbb::internal</a><li>reference_count
+: <a class="el" href="a00319.html#a10">tbb::internal</a><li>release
+: <a class="el" href="a00318.html#a57a2">tbb</a><li>run_parallel_do()
+: <a class="el" href="a00321.html#ga0">tbb::internal</a><li>runtime_warning()
+: <a class="el" href="a00319.html#a76">tbb::internal</a></ul>
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
<li>select_parallel_do()
-: <a class="el" href="a00281.html#ga2">tbb::internal</a></ul>
+: <a class="el" href="a00321.html#ga2">tbb::internal</a><li>set_assertion_handler()
+: <a class="el" href="a00318.html#a51">tbb</a></ul>
<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
-<li>tbb_thread
-: <a class="el" href="a00278.html#a7">tbb</a></ul>
+<li>TBB_runtime_interface_version()
+: <a class="el" href="a00318.html#a53">tbb</a><li>tbb_thread
+: <a class="el" href="a00318.html#a7">tbb</a></ul>
<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
<li>uintptr
-: <a class="el" href="a00279.html#a13">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a21">tbb::internal</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html
index e68711d..5b4d083 100644
--- a/doc/html/namespacemembers_enum.html
+++ b/doc/html/namespacemembers_enum.html
@@ -4,16 +4,16 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="namespacemembers.html">All</a> | <a class="qindex" href="namespacemembers_func.html">Functions</a> | <a class="qindex" href="namespacemembers_vars.html">Variables</a> | <a class="qindex" href="namespacemembers_type.html">Typedefs</a> | <a class="qindexHL" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindex" href="namespacemembers_eval.html">Enumeration values</a></div>
<p>
<ul>
<li>memory_semantics
-: <a class="el" href="a00278.html#a37">tbb</a></ul>
+: <a class="el" href="a00318.html#a57">tbb</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html
index 0f778e6..bd7a7a2 100644
--- a/doc/html/namespacemembers_eval.html
+++ b/doc/html/namespacemembers_eval.html
@@ -4,18 +4,18 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="namespacemembers.html">All</a> | <a class="qindex" href="namespacemembers_func.html">Functions</a> | <a class="qindex" href="namespacemembers_vars.html">Variables</a> | <a class="qindex" href="namespacemembers_type.html">Typedefs</a> | <a class="qindex" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindexHL" href="namespacemembers_eval.html">Enumeration values</a></div>
<p>
<ul>
<li>__TBB_full_fence
-: <a class="el" href="a00278.html#a37a0">tbb</a><li>acquire
-: <a class="el" href="a00278.html#a37a1">tbb</a><li>release
-: <a class="el" href="a00278.html#a37a2">tbb</a></ul>
+: <a class="el" href="a00318.html#a57a0">tbb</a><li>acquire
+: <a class="el" href="a00318.html#a57a1">tbb</a><li>release
+: <a class="el" href="a00318.html#a57a2">tbb</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html
index 60b56c1..6948d64 100644
--- a/doc/html/namespacemembers_func.html
+++ b/doc/html/namespacemembers_func.html
@@ -4,34 +4,41 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="namespacemembers.html">All</a> | <a class="qindexHL" href="namespacemembers_func.html">Functions</a> | <a class="qindex" href="namespacemembers_vars.html">Variables</a> | <a class="qindex" href="namespacemembers_type.html">Typedefs</a> | <a class="qindex" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindex" href="namespacemembers_eval.html">Enumeration values</a></div>
<p>
<ul>
-<li>allocate_closure_v3()
-: <a class="el" href="a00279.html#a54">tbb::internal</a><li>allocate_via_handler_v3()
-: <a class="el" href="a00279.html#a42">tbb::internal</a><li>deallocate_via_handler_v3()
-: <a class="el" href="a00279.html#a41">tbb::internal</a><li>free_closure_v3()
-: <a class="el" href="a00279.html#a55">tbb::internal</a><li>is_malloc_used_v3()
-: <a class="el" href="a00279.html#a43">tbb::internal</a><li>itt_load_pointer_with_acquire_v3()
-: <a class="el" href="a00279.html#a36">tbb::internal</a><li>itt_store_pointer_with_release_v3()
-: <a class="el" href="a00279.html#a35">tbb::internal</a><li>NFS_Allocate()
-: <a class="el" href="a00279.html#a17">tbb::internal</a><li>NFS_Free()
-: <a class="el" href="a00279.html#a18">tbb::internal</a><li>NFS_GetLineSize()
-: <a class="el" href="a00279.html#a16">tbb::internal</a><li>parallel_do()
-: <a class="el" href="a00281.html#ga3">tbb</a><li>parallel_for()
-: <a class="el" href="a00281.html#ga6">tbb</a><li>parallel_quick_sort()
-: <a class="el" href="a00281.html#ga12">tbb::internal</a><li>parallel_reduce()
-: <a class="el" href="a00281.html#ga9">tbb</a><li>parallel_scan()
-: <a class="el" href="a00281.html#ga11">tbb</a><li>parallel_sort()
-: <a class="el" href="a00281.html#ga15">tbb</a><li>run_parallel_do()
-: <a class="el" href="a00281.html#ga0">tbb::internal</a><li>runtime_warning()
-: <a class="el" href="a00279.html#a52">tbb::internal</a><li>select_parallel_do()
-: <a class="el" href="a00281.html#ga2">tbb::internal</a></ul>
+<li>__TBB_DECL_ATOMIC_PRIMITIVES()
+: <a class="el" href="a00319.html#a30">tbb::internal</a><li>allocate_closure_v3()
+: <a class="el" href="a00319.html#a79">tbb::internal</a><li>allocate_via_handler_v3()
+: <a class="el" href="a00319.html#a62">tbb::internal</a><li>assertion_failure()
+: <a class="el" href="a00318.html#a52">tbb</a><li>deallocate_via_handler_v3()
+: <a class="el" href="a00319.html#a61">tbb::internal</a><li>free_closure_v3()
+: <a class="el" href="a00319.html#a80">tbb::internal</a><li>hasher()
+: <a class="el" href="a00319.html#a36">tbb::internal</a><li>is_malloc_used_v3()
+: <a class="el" href="a00319.html#a63">tbb::internal</a><li>itt_load_pointer_v3()
+: <a class="el" href="a00319.html#a42">tbb::internal</a><li>itt_load_pointer_with_acquire_v3()
+: <a class="el" href="a00319.html#a56">tbb::internal</a><li>itt_store_pointer_with_release_v3()
+: <a class="el" href="a00319.html#a55">tbb::internal</a><li>NFS_Allocate()
+: <a class="el" href="a00319.html#a32">tbb::internal</a><li>NFS_Free()
+: <a class="el" href="a00319.html#a33">tbb::internal</a><li>NFS_GetLineSize()
+: <a class="el" href="a00319.html#a31">tbb::internal</a><li>parallel_do()
+: <a class="el" href="a00321.html#ga4">tbb</a><li>parallel_for()
+: <a class="el" href="a00321.html#ga10">tbb</a><li>parallel_quick_sort()
+: <a class="el" href="a00321.html#ga25">tbb::internal</a><li>parallel_reduce()
+: <a class="el" href="a00321.html#ga22">tbb</a><li>parallel_scan()
+: <a class="el" href="a00321.html#ga24">tbb</a><li>parallel_sort()
+: <a class="el" href="a00321.html#ga28">tbb</a><li>poison_pointer()
+: <a class="el" href="a00319.html#a77">tbb::internal</a><li>run_parallel_do()
+: <a class="el" href="a00321.html#ga0">tbb::internal</a><li>runtime_warning()
+: <a class="el" href="a00319.html#a76">tbb::internal</a><li>select_parallel_do()
+: <a class="el" href="a00321.html#ga2">tbb::internal</a><li>set_assertion_handler()
+: <a class="el" href="a00318.html#a51">tbb</a><li>TBB_runtime_interface_version()
+: <a class="el" href="a00318.html#a53">tbb</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html
index 73c3f9c..e682a8e 100644
--- a/doc/html/namespacemembers_type.html
+++ b/doc/html/namespacemembers_type.html
@@ -4,22 +4,23 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="namespacemembers.html">All</a> | <a class="qindex" href="namespacemembers_func.html">Functions</a> | <a class="qindex" href="namespacemembers_vars.html">Variables</a> | <a class="qindexHL" href="namespacemembers_type.html">Typedefs</a> | <a class="qindex" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindex" href="namespacemembers_eval.html">Enumeration values</a></div>
<p>
<ul>
<li>affinity_id
-: <a class="el" href="a00279.html#a12">tbb::internal</a><li>assertion_handler_type
-: <a class="el" href="a00278.html#a6">tbb</a><li>intptr
-: <a class="el" href="a00279.html#a14">tbb::internal</a><li>reduction_context
-: <a class="el" href="a00279.html#a4">tbb::internal</a><li>reference_count
-: <a class="el" href="a00279.html#a11">tbb::internal</a><li>tbb_thread
-: <a class="el" href="a00278.html#a7">tbb</a><li>uintptr
-: <a class="el" href="a00279.html#a13">tbb::internal</a></ul>
+: <a class="el" href="a00319.html#a11">tbb::internal</a><li>assertion_handler_type
+: <a class="el" href="a00318.html#a6">tbb</a><li>hashcode_t
+: <a class="el" href="a00319.html#a2">tbb::internal</a><li>intptr
+: <a class="el" href="a00319.html#a22">tbb::internal</a><li>reduction_context
+: <a class="el" href="a00319.html#a7">tbb::internal</a><li>reference_count
+: <a class="el" href="a00319.html#a10">tbb::internal</a><li>tbb_thread
+: <a class="el" href="a00318.html#a7">tbb</a><li>uintptr
+: <a class="el" href="a00319.html#a21">tbb::internal</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespacemembers_vars.html b/doc/html/namespacemembers_vars.html
index 143fab7..7993041 100644
--- a/doc/html/namespacemembers_vars.html
+++ b/doc/html/namespacemembers_vars.html
@@ -4,16 +4,17 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindexHL" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<div class="qindex"><a class="qindex" href="namespacemembers.html">All</a> | <a class="qindex" href="namespacemembers_func.html">Functions</a> | <a class="qindexHL" href="namespacemembers_vars.html">Variables</a> | <a class="qindex" href="namespacemembers_type.html">Typedefs</a> | <a class="qindex" href="namespacemembers_enum.html">Enumerations</a> | <a class="qindex" href="namespacemembers_eval.html">Enumeration values</a></div>
<p>
<ul>
-<li>NFS_MaxLineSize
-: <a class="el" href="a00279.html#a0">tbb::internal</a></ul>
+<li>hash_multiplier
+: <a class="el" href="a00319.html#a3">tbb::internal</a><li>NFS_MaxLineSize
+: <a class="el" href="a00319.html#a1">tbb::internal</a></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
index 9886162..7adbd24 100644
--- a/doc/html/namespaces.html
+++ b/doc/html/namespaces.html
@@ -4,14 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindexHL" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindexHL" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.htm [...]
<h1>Namespace List</h1>Here is a list of all documented namespaces with brief descriptions:<table>
- <tr><td class="indexkey"><a class="el" href="a00278.html">tbb</a></td><td class="indexvalue">The namespace tbb contains all components of the library </td></tr>
- <tr><td class="indexkey"><a class="el" href="a00279.html">tbb::internal</a></td><td class="indexvalue">INTERNAL </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00318.html">tbb</a></td><td class="indexvalue">The namespace tbb contains all components of the library </td></tr>
+ <tr><td class="indexkey"><a class="el" href="a00319.html">tbb::internal</a></td><td class="indexvalue">INTERNAL </td></tr>
</table>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/pages.html b/doc/html/pages.html
index a63bd6e..6d52090 100644
--- a/doc/html/pages.html
+++ b/doc/html/pages.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>
<li><a class="el" href="range_req.html">Requirements on range concept</a>
@@ -14,16 +14,20 @@
<li><a class="el" href="parallel_reduce_body_req.html">Requirements on parallel_reduce body</a>
+<li><a class="el" href="parallel_reduce_lambda_req.html">Requirements on parallel_reduce anonymous function objects (lambda functions)</a>
+
<li><a class="el" href="parallel_scan_body_req.html">Requirements on parallel_scan body</a>
<li><a class="el" href="parallel_sort_iter_req.html">Requirements on iterators for parallel_sort</a>
<li><a class="el" href="concepts.html">TBB concepts</a>
+<li><a class="el" href="deprecated.html">Deprecated List</a>
+
</ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_do_body_req.html b/doc/html/parallel_do_body_req.html
index f719380..415faa7 100644
--- a/doc/html/parallel_do_body_req.html
+++ b/doc/html/parallel_do_body_req.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="parallel_do_body_req">Requirements on parallel_do body</a></h1>Class <code>Body</code> implementing the concept of parallel_do body must define:<ul>
<li><div class="fragment"><pre class="fragment"> B::operator()(
cv_item_type item,
@@ -22,7 +22,7 @@
</pre></div>Destroy a work item </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_for_body_req.html b/doc/html/parallel_for_body_req.html
index 2c45f0a..41c95f7 100644
--- a/doc/html/parallel_for_body_req.html
+++ b/doc/html/parallel_for_body_req.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="parallel_for_body_req">Requirements on parallel_for body</a></h1>Class <code>Body</code> implementing the concept of parallel_for body must define:<ul>
<li><div class="fragment"><pre class="fragment"> Body::Body( <span class="keyword">const</span> Body& );
</pre></div>Copy constructor</li><li><div class="fragment"><pre class="fragment"> Body::~Body();
@@ -12,7 +12,7 @@
</pre></div>Function call operator applying the body to range <code>r</code>. </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_reduce_body_req.html b/doc/html/parallel_reduce_body_req.html
index 5a4bf3a..50c913a 100644
--- a/doc/html/parallel_reduce_body_req.html
+++ b/doc/html/parallel_reduce_body_req.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="parallel_reduce_body_req">Requirements on parallel_reduce body</a></h1>Class <code>Body</code> implementing the concept of parallel_reduce body must define:<ul>
<li><div class="fragment"><pre class="fragment"> Body::Body( Body&, split );
</pre></div>Splitting constructor. Must be able to run concurrently with operator() and method <code>join</code> </li><li><div class="fragment"><pre class="fragment"> Body::~Body();
@@ -13,7 +13,7 @@
</pre></div>Join results. The result in <code>b</code> should be merged into the result of <code>this</code> </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/a00122.html b/doc/html/parallel_reduce_lambda_req.html
similarity index 65%
copy from doc/html/a00122.html
copy to doc/html/parallel_reduce_lambda_req.html
index b1b079c..dffbf9e 100644
--- a/doc/html/a00122.html
+++ b/doc/html/parallel_reduce_lambda_req.html
@@ -1,15 +1,13 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Member List</title>
+<title>Requirements on parallel_reduce anonymous function objects (lambda functions)</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
-<h1>tbb::internal::no_copy Member List</h1>This is the complete list of members for <a class="el" href="a00200.html">tbb::internal::no_copy</a>, including all inherited members.<p><table>
- <tr class="memlist"><td><a class="el" href="a00200.html#a0">no_copy</a>()</td><td><a class="el" href="a00200.html">tbb::internal::no_copy</a></td><td><code> [inline]</code></td></tr>
-</table><hr>
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<h1><a class="anchor" name="parallel_reduce_lambda_req">Requirements on parallel_reduce anonymous function objects (lambda functions)</a></h1>TO BE DOCUMENTED <hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_scan_body_req.html b/doc/html/parallel_scan_body_req.html
index 9dea790..dff40ed 100644
--- a/doc/html/parallel_scan_body_req.html
+++ b/doc/html/parallel_scan_body_req.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="parallel_scan_body_req">Requirements on parallel_scan body</a></h1>Class <code>Body</code> implementing the concept of parallel_reduce body must define:<ul>
<li><div class="fragment"><pre class="fragment"> Body::Body( Body&, split );
</pre></div>Splitting constructor. Split <code>b</code> so that <code>this</code> and <code>b</code> can accumulate separately</li><li><div class="fragment"><pre class="fragment"> Body::~Body();
@@ -14,7 +14,7 @@
</pre></div>Merge preprocessing state of <code>a</code> into <code>this</code>, where <code>a</code> was created earlier from <code>b</code> by b's splitting constructor </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/parallel_sort_iter_req.html b/doc/html/parallel_sort_iter_req.html
index f568870..b78ca9c 100644
--- a/doc/html/parallel_sort_iter_req.html
+++ b/doc/html/parallel_sort_iter_req.html
@@ -4,14 +4,14 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="parallel_sort_iter_req">Requirements on iterators for parallel_sort</a></h1>Requirements on value type <code>T</code> of <code>RandomAccessIterator</code> for <code>parallel_sort:</code> <ul>
<li><div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> swap( T& x, T& y )
</pre></div>Swaps <code>x</code> and <code>y</code> </li><li><div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> Compare::operator()( <span class="keyword">const</span> T& x, <span class="keyword">const</span> T& y )
</pre></div>True if x comes before y; </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/doc/html/range_req.html b/doc/html/range_req.html
index e737d1a..654dea2 100644
--- a/doc/html/range_req.html
+++ b/doc/html/range_req.html
@@ -4,7 +4,7 @@
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
-<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
+<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html" [...]
<h1><a class="anchor" name="range_req">Requirements on range concept</a></h1>Class <code>R</code> implementing the concept of range must define:<ul>
<li><div class="fragment"><pre class="fragment"> R::R( <span class="keyword">const</span> R& );
</pre></div>Copy constructor</li><li><div class="fragment"><pre class="fragment"> R::~R();
@@ -14,7 +14,7 @@
</pre></div>Split range <code>r</code> into two subranges. </li></ul>
<hr>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
index 87886b5..d2b252a 100644
--- a/examples/GettingStarted/index.html
+++ b/examples/GettingStarted/index.html
@@ -13,7 +13,7 @@ This directory contains the examples referenced by the Threading Building Blocks
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile
index 6adae0c..fbefe9c 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,6 +25,8 @@
# the GNU General Public License.
# GNU Makefile that builds and runs example.
+PROG=sub_string_finder_extended
+ARGS=
# The C++ compiler
#CXX=g++
@@ -37,12 +39,12 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb_debug $(LIBS)
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb_debug $(LIBS)
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb_debug $(LIBS)
clean:
rm -f sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d
test:
- ./sub_string_finder_extended
+ ./$(PROG) $(ARGS)
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
index e8f4437..c733958 100644
--- a/examples/GettingStarted/sub_string_finder/Makefile.windows
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,6 +25,8 @@
# the GNU General Public License.
# Common Makefile that builds and runs examples.
+PROG=sub_string_finder_extended
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -37,10 +39,10 @@ release:
$(CXX) sub_string_finder_extended.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
$(CXX) sub_string_finder_pretty.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
debug:
- $(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe
- $(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
- $(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
+ $(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder.exe
+ $(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
+ $(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
clean:
@cmd.exe /C del sub_string_finder*.exe *.obj *.?db *.manifest
test:
- sub_string_finder_extended
+ $(PROG) $(ARGS)
diff --git a/examples/GettingStarted/sub_string_finder/index.html b/examples/GettingStarted/sub_string_finder/index.html
index 69ea83f..64dd194 100644
--- a/examples/GettingStarted/sub_string_finder/index.html
+++ b/examples/GettingStarted/sub_string_finder/index.html
@@ -54,7 +54,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
index 76944a3..6add9ef 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,7 +28,7 @@
#include <iostream>
#include <string>
-#include <algorithm>
+#include <algorithm>
#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
@@ -38,32 +38,32 @@ using namespace std;
static const size_t N = 23;
-class SubStringFinder {
- const string str;
- size_t *max_array;
- size_t *pos_array;
- public:
- void operator() ( const blocked_range<size_t>& r ) const {
- for ( size_t i = r.begin(); i != r.end(); ++i ) {
- size_t max_size = 0, max_pos = 0;
- for (size_t j = 0; j < str.size(); ++j)
- if (j != i) {
- size_t limit = str.size()-( i > j ? i : j );
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
for (size_t k = 0; k < limit; ++k) {
- if (str[i + k] != str[j + k]) break;
- if (k > max_size) {
- max_size = k;
- max_pos = j;
- }
+ if (str[i + k] != str[j + k]) break;
+ if (k > max_size) {
+ max_size = k;
+ max_pos = j;
+ }
}
- }
- max_array[i] = max_size;
- pos_array[i] = max_pos;
- }
- }
- SubStringFinder(string &s, size_t *m, size_t *p) :
- str(s), max_array(m), pos_array(p) { }
-};
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
int main(int argc, char *argv[]) {
task_scheduler_init init;
@@ -76,10 +76,12 @@ int main(int argc, char *argv[]) {
size_t *pos = new size_t[to_scan.size()];
parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
- SubStringFinder( to_scan, max, pos ) );
+ SubStringFinder( to_scan, max, pos ) );
for (size_t i = 0; i < to_scan.size(); ++i)
cout << " " << (int)max[i] << "(" << (int)pos[i] << ")" << endl;
+ delete[] max;
+ delete[] pos;
return 0;
}
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
index 6664fbb..8d45529 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,7 +28,7 @@
#include <iostream>
#include <string>
-#include <algorithm>
+#include <algorithm>
#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
@@ -57,32 +57,32 @@ void SerialSubStringFinder ( const string &str, size_t *max_array, size_t *pos_a
}
}
-class SubStringFinder {
- const string str;
- size_t *max_array;
- size_t *pos_array;
- public:
- void operator() ( const blocked_range<size_t>& r ) const {
- for ( size_t i = r.begin(); i != r.end(); ++i ) {
- size_t max_size = 0, max_pos = 0;
- for (size_t j = 0; j < str.size(); ++j)
- if (j != i) {
- size_t limit = str.size()-( i > j ? i : j );
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
for (size_t k = 0; k < limit; ++k) {
- if (str[i + k] != str[j + k]) break;
- if (k > max_size) {
- max_size = k;
- max_pos = j;
- }
+ if (str[i + k] != str[j + k]) break;
+ if (k > max_size) {
+ max_size = k;
+ max_pos = j;
+ }
}
- }
- max_array[i] = max_size;
- pos_array[i] = max_pos;
- }
- }
- SubStringFinder(string &s, size_t *m, size_t *p) :
- str(s), max_array(m), pos_array(p) { }
-};
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
int main(int argc, char *argv[]) {
task_scheduler_init init;
@@ -105,7 +105,7 @@ int main(int argc, char *argv[]) {
tick_count parallel_t0 = tick_count::now();
parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
- SubStringFinder( to_scan, max, pos ) );
+ SubStringFinder( to_scan, max, pos ) );
tick_count parallel_t1 = tick_count::now();
cout << " Done with parallel version." << endl;
@@ -119,6 +119,10 @@ int main(int argc, char *argv[]) {
cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
<< "Parallel version ran in " << (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
<< "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
+ delete[] max;
+ delete[] pos;
+ delete[] max2;
+ delete[] pos2;
return 0;
}
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
index 98b9a67..f61ffc2 100644
--- a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,7 +28,7 @@
#include <iostream>
#include <string>
-#include <algorithm>
+#include <algorithm>
#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
@@ -36,32 +36,32 @@
using namespace tbb;
static const size_t N = 9;
-class SubStringFinder {
- const std::string str;
- size_t *max_array;
- size_t *pos_array;
- public:
- void operator() ( const blocked_range<size_t>& r ) const {
- for ( size_t i = r.begin(); i != r.end(); ++i ) {
- size_t max_size = 0, max_pos = 0;
- for (size_t j = 0; j < str.size(); ++j)
- if (j != i) {
- size_t limit = str.size()-( i > j ? i : j );
+class SubStringFinder {
+ const std::string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
for (size_t k = 0; k < limit; ++k) {
- if (str[i + k] != str[j + k]) break;
- if (k+1 > max_size) {
- max_size = k+1;
- max_pos = j;
- }
+ if (str[i + k] != str[j + k]) break;
+ if (k+1 > max_size) {
+ max_size = k+1;
+ max_pos = j;
+ }
}
- }
- max_array[i] = max_size;
- pos_array[i] = max_pos;
- }
- }
- SubStringFinder(std::string &s, size_t *m, size_t *p) :
- str(s), max_array(m), pos_array(p) { }
-};
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(std::string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
int main(int argc, char *argv[]) {
task_scheduler_init init;
@@ -75,7 +75,7 @@ int main(int argc, char *argv[]) {
size_t *pos = new size_t[to_scan.size()];
parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
- SubStringFinder( to_scan, max, pos ) );
+ SubStringFinder( to_scan, max, pos ) );
for (size_t i = 0; i < to_scan.size(); ++i) {
for (size_t j = 0; j < to_scan.size(); ++j) {
@@ -90,6 +90,8 @@ int main(int argc, char *argv[]) {
}
std::cout << std::endl;
}
+ delete[] max;
+ delete[] pos;
return 0;
}
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
index 89195c0..ec886cc 100644
--- a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
index 84b3207..f4270ea 100644
--- a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
index 047fb97..f4ba578 100644
--- a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
index 51b858a..1b92805 100644
--- a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
index acb653e..dcdd1fa 100644
--- a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
index 09bbfb6..fe7775d 100644
--- a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
index 566265d..98fbd69 100644
--- a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj
index 806a846..c107858 100644
--- a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_extended.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj
index 869b944..4851c73 100644
--- a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj
+++ b/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder_pretty.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/Makefile b/examples/Makefile
index c183e47..ddbda8a 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -37,7 +37,8 @@ tbb_root?=..
BUILDING_PHASE:=0
include ../build/common.inc
-ifneq ($(firstword is_abs_path$(subst /, ,$(tbb_root))),is_abs_path)
+#check, if tbb_root is not absolute path (the filter keeps only /* paths)
+ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
# also changes related variables like work_dir
override tbb_root := $(CWD)$(SLASH)..
export TBB21_INSTALL_DIR := $(tbb_root)
@@ -57,46 +58,50 @@ else
EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE))
# platform-specific settings
ifeq ($(arch),itanium)
- export CXXFLAGS += $(PIC_KEY)
+ override CXXFLAGS += $(PIC_KEY)
endif
ifeq ($(compiler),gcc)
ifeq ($(arch),em64t)
- export CXXFLAGS += -m64
+ override CXXFLAGS += -m64
endif
ifeq ($(arch),ia32)
- export CXXFLAGS += -m32
+ override CXXFLAGS += -m32
endif
ifeq ($(arch),ppc64)
- export CXXFLAGS += -m64
+ override CXXFLAGS += -m64
endif
ifeq ($(arch),ppc32)
- export CXXFLAGS += -m32
+ override CXXFLAGS += -m32
+ endif
+ ifeq ($(arch),sparc)
+ override CXXFLAGS += -mcpu=v9 -m64
endif
endif
ifeq ($(compiler),suncc)
- export CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause
- endif
- ifeq ($(tbb_os),SunOS)
+ override CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause
ifeq ($(arch),em64t)
- export CXXFLAGS += -m64
+ override CXXFLAGS += -m64
endif
ifeq ($(arch),ia32)
- export CXXFLAGS += -m32
+ override CXXFLAGS += -m32
+ endif
+ ifeq ($(arch),sparc)
+ override CXXFLAGS += -m64
endif
endif
ifeq ($(tbb_os),macos)
+ # GUI for examples does not support 64-bit platforms
ifeq ($(arch),em64t)
- # making GUI examples work in text console due to incompatible arch
export UI=con
endif
ifeq ($(arch),ppc64)
- # making GUI examples work in text console due to incompatible arch
export UI=con
endif
export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
else
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
endif
+ export LIBS
export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
export CPATH := $(CPATH):$(tbb_root)/include
endif
@@ -116,7 +121,7 @@ $(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS))
# proxy rule for calling appropriate example
$(EXAMPLES_TARGETS)::
- -$(MAKE) -C $(@D) -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)"
+ -$(MAKE) -C $(@D) -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" CXXFLAGS="$(CXXFLAGS)"
printenv:
ifeq ($(tbb_os),windows)
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
index 0c0ec27..894c71e 100644
--- a/examples/common/gui/Makefile.win
+++ b/examples/common/gui/Makefile.win
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
diff --git a/examples/common/gui/convideo.cpp b/examples/common/gui/convideo.cpp
index 73bc79d..93fd708 100644
--- a/examples/common/gui/convideo.cpp
+++ b/examples/common/gui/convideo.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -34,26 +34,24 @@ unsigned int * g_pImg = 0;
int g_sizex, g_sizey;
static video *g_video = 0;
static int g_fps = 0;
+
#if _WIN32 || _WIN64
-static DWORD g_msec = 0;
+static DWORD g_msec = 0;
#ifdef _WINDOWS
HINSTANCE video::win_hInstance = 0;
int video::win_iCmdShow = 0;
-void video::win_set_class(WNDCLASSEX &wcex)
-{
-}
-void video::win_load_accelerators(int idc)
-{
-}
-#endif
+void video::win_set_class(WNDCLASSEX &wcex) { }
+void video::win_load_accelerators(int idc) { }
+#endif //_WINDOWS
-#elif __linux__ || __APPLE__ || __FreeBSD__
+#else
#include <sched.h>
#include <sys/time.h>
struct timeval g_time;
-#endif
+
+#endif //_WIN32||_WIN64
video::video()
: red_mask(0xff0000), red_shift(16), green_mask(0xff00),
@@ -114,7 +112,7 @@ bool video::next_frame()
return running;
}
-//! Do standart loop
+//! Do standard loop
void video::main_loop()
{
on_process();
diff --git a/examples/common/gui/ddvideo.cpp b/examples/common/gui/ddvideo.cpp
index 080a46f..4e1a28f 100644
--- a/examples/common/gui/ddvideo.cpp
+++ b/examples/common/gui/ddvideo.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -86,7 +86,9 @@ void DestroyOverlay()
g_pClipper->Release();
if (g_pDDSOverlay) {
g_pImg = 0; LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
- g_pDDSOverlay = NULL; Sleep(0); pDDSOverlay->Release(); // be sure nobody uses old value
+ g_pDDSOverlay = NULL;
+ YIELD_TO_THREAD();
+ pDDSOverlay->Release(); // be sure nobody uses old value
}
}
@@ -196,7 +198,7 @@ DWORD DDColorMatch(IDirectDrawSurface7 * pdds, COLORREF rgb)
// Now lock the surface so we can read back the converted color
ddsd.dwSize = sizeof(ddsd);
while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
- Sleep(0);
+ YIELD_TO_THREAD();
if (hres == DD_OK) {
dw = *(DWORD *) ddsd.lpSurface; // Get DWORD
if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
@@ -485,12 +487,16 @@ DWORD WINAPI thread_vsync(LPVOID lpParameter)
BOOL vblank = false;
while(g_video && g_video->running) {
while(!vblank && g_video && g_video->running) {
- Sleep(0); LPDIRECTDRAW7 pDD(g_pDD); if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+ YIELD_TO_THREAD();
+ LPDIRECTDRAW7 pDD(g_pDD);
+ if(pDD) pDD->GetVerticalBlankStatus(&vblank);
}
LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
if(pDDSOverlay) pDDSOverlay->UpdateOverlay(&g_rcSrc, g_pDDSPrimary, &g_rcDst, g_OverlayFlags | DDOVER_REFRESHALL, &g_OverlayFX);
do {
- Sleep(1); LPDIRECTDRAW7 pDD(g_pDD); if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+ Sleep(1);
+ LPDIRECTDRAW7 pDD(g_pDD);
+ if(pDD) pDD->GetVerticalBlankStatus(&vblank);
} while(vblank && g_video && g_video->running);
while(g_video && !g_video->updating && g_video->running) Sleep(10);
}
@@ -535,11 +541,11 @@ bool video::init_window(int sizex, int sizey)
g_pImg[i] = c; // clear surface
ShowWindow(g_hAppWnd, SW_SHOW);
g_hVSync = CreateThread (
- NULL, // LPSECURITY_ATTRIBUTES security_attrs
- 0, // SIZE_T stacksize
- (LPTHREAD_START_ROUTINE) thread_vsync,
- this, // argument
- 0, 0);
+ NULL, // LPSECURITY_ATTRIBUTES security_attrs
+ 0, // SIZE_T stacksize
+ (LPTHREAD_START_ROUTINE) thread_vsync,
+ this, // argument
+ 0, 0);
SetPriorityClass(g_hVSync, IDLE_PRIORITY_CLASS); // questionable
return true;
fail:
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
index 8786bab..2f766e3 100644
--- a/examples/common/gui/dxcheck.bat
+++ b/examples/common/gui/dxcheck.bat
@@ -1,6 +1,6 @@
@echo off
REM
-REM Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+REM Copyright 2005-2009 Intel Corporation. All Rights Reserved.
REM
REM This file is part of Threading Building Blocks.
REM
diff --git a/examples/common/gui/gdivideo.cpp b/examples/common/gui/gdivideo.cpp
index a77a45a..25cb02f 100644
--- a/examples/common/gui/gdivideo.cpp
+++ b/examples/common/gui/gdivideo.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/common/gui/macvideo.cpp b/examples/common/gui/macvideo.cpp
index a49b10a..f2e5224 100644
--- a/examples/common/gui/macvideo.cpp
+++ b/examples/common/gui/macvideo.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -1461,7 +1461,7 @@ bool video::next_frame()
return true;
}
-//! Do standart loop
+//! Do standard loop
void video::main_loop()
{
struct timezone tz; gettimeofday(&g_time, &tz);
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
index 115e27f..f39db57 100644
--- a/examples/common/gui/video.h
+++ b/examples/common/gui/video.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
index 2f1b804..c704d37 100644
--- a/examples/common/gui/winvideo.h
+++ b/examples/common/gui/winvideo.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,10 +27,20 @@
*/
/////// Common internal implementation of Windows-specific stuff //////////////
+/////// Must be the first included header //////////////
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif
+// Check that the target Windows version has all API calls requried.
+#ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0400
+#endif
+#if _WIN32_WINNT<0x0400
+# define YIELD_TO_THREAD() Sleep(0)
+#else
+# define YIELD_TO_THREAD() SwitchToThread()
+#endif
#include "video.h"
#include <fcntl.h>
#include <io.h>
@@ -190,10 +200,11 @@ DWORD WINAPI thread_video(LPVOID lpParameter)
static bool loop_once(video *v)
{
// screen update notify
- if(g_updates) {
- if(g_video->updating) { g_skips += g_updates-1; g_fps++; }
- else g_skips += g_updates;
- g_updates = 0; UpdateWindow(g_hAppWnd);
+ if(int updates = g_updates) {
+ g_updates = 0;
+ if(g_video->updating) { g_skips += updates-1; g_fps++; }
+ else g_skips += updates;
+ UpdateWindow(g_hAppWnd);
}
// update fps
DWORD msec = GetTickCount();
@@ -201,8 +212,8 @@ static bool loop_once(video *v)
double sec = (msec - g_msec)/1000.0;
char buffer[256], n = _snprintf(buffer, 128, "%s: %d fps", v->title, int(double(g_fps + g_skips)/sec));
if(g_skips) _snprintf(buffer+n, 128, " - %d skipped = %d updates", int(g_skips/sec), int(g_fps/sec));
- SetWindowTextA(g_hAppWnd, buffer);
- g_msec = msec; g_skips = g_fps = 0;
+ SetWindowTextA(g_hAppWnd, buffer);
+ g_msec = msec; g_skips = g_fps = 0;
}
// event processing, including painting
MSG msg;
@@ -219,7 +230,7 @@ static bool loop_once(video *v)
return false;
}
-//! Do standart event loop
+//! Do standard event loop
void video::main_loop()
{
// let Windows draw and unroll the window
@@ -229,17 +240,18 @@ void video::main_loop()
g_msec = GetTickCount();
// now, start main process
if(threaded) {
- g_handles[0] = CreateThread (
- NULL, // LPSECURITY_ATTRIBUTES security_attrs
- 0, // SIZE_T stacksize
- (LPTHREAD_START_ROUTINE) thread_video,
- this, // argument
- 0, 0);
+ g_handles[0] = CreateThread (
+ NULL, // LPSECURITY_ATTRIBUTES security_attrs
+ 0, // SIZE_T stacksize
+ (LPTHREAD_START_ROUTINE) thread_video,
+ this, // argument
+ 0, 0);
if(!g_handles[0]) { DisplayError("Can't create thread"); return; }
- else g_handles[1] = CreateEvent(NULL, false, false, NULL);
+ else // harmless race is possible here
+ g_handles[1] = CreateEvent(NULL, false, false, NULL);
while(running) {
while(loop_once(this));
- Sleep(0); // give time for processing when running on single CPU
+ YIELD_TO_THREAD(); // give time for processing when running on single CPU
DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE);
if(r == WAIT_OBJECT_0) break; // thread terminated
}
@@ -256,10 +268,13 @@ void video::main_loop()
//! Refresh screen picture
bool video::next_frame()
{
- if(!running) return false;
- g_updates++;
+ if(!running) return false;
+ g_updates++; // fast but inaccurate counter. The race is possible here
if(!threaded) while(loop_once(this));
- else if(g_handles[1]) { SetEvent(g_handles[1]); Sleep(0); }
+ else if(g_handles[1]) {
+ SetEvent(g_handles[1]);
+ YIELD_TO_THREAD();
+ }
return true;
}
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
index 7820d0c..7fb39a4 100644
--- a/examples/common/gui/xvideo.cpp
+++ b/examples/common/gui/xvideo.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -259,7 +259,7 @@ video::~video()
g_video = 0;
}
-//! Do standart event loop
+//! Do standard event loop
void video::main_loop()
{
struct timezone tz; gettimeofday(&g_time, &tz);
diff --git a/examples/common/index.html b/examples/common/index.html
index 0c4c036..59ec57b 100644
--- a/examples/common/index.html
+++ b/examples/common/index.html
@@ -25,7 +25,7 @@ This code is not intended to be used directly. It is incorporated automatically
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile
index 3619db9..22a4893 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=count_strings
+ARGS=
# The C++ compiler
#CXX=g++
@@ -36,10 +37,10 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG)
+ ./$(PROG) $(ARGS)
diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows
index a791449..1fb0431 100644
--- a/examples/concurrent_hash_map/count_strings/Makefile.windows
+++ b/examples/concurrent_hash_map/count_strings/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Count_Strings
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -38,8 +39,8 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG)
+ $(PROG) $(ARGS)
diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp
index 7c89d01..2745220 100644
--- a/examples/concurrent_hash_map/count_strings/count_strings.cpp
+++ b/examples/concurrent_hash_map/count_strings/count_strings.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -37,9 +37,10 @@
#include "tbb/task_scheduler_init.h"
#include "tbb/tbb_allocator.h"
-
-//! custom string
-typedef std::basic_string<char,std::char_traits<char>,tbb::tbb_allocator<char> > mystring;
+//! String type with scalable allocator.
+/** On platforms with non-scalable default memory allocators, the example scales
+ better if the string allocator is changed to tbb::tbb_allocator<char>. */
+typedef std::basic_string<char,std::char_traits<char>,tbb::tbb_allocator<char> > MyString;
using namespace tbb;
using namespace std;
@@ -59,27 +60,27 @@ static bool is_number_of_threads_set = false;
//! Structure that defines hashing and comparison operations for user's type.
struct MyHashCompare {
- static size_t hash( const mystring& x ) {
+ static size_t hash( const MyString& x ) {
size_t h = 0;
for( const char* s = x.c_str(); *s; s++ )
h = (h*16777179)^*s;
return h;
}
//! True if strings are equal
- static bool equal( const mystring& x, const mystring& y ) {
+ static bool equal( const MyString& x, const MyString& y ) {
return x==y;
}
};
//! A concurrent hash table that maps strings to ints.
-typedef concurrent_hash_map<mystring,int,MyHashCompare> StringTable;
+typedef concurrent_hash_map<MyString,int,MyHashCompare> StringTable;
//! Function object for counting occurrences of strings.
struct Tally {
StringTable& table;
Tally( StringTable& table_ ) : table(table_) {}
- void operator()( const blocked_range<mystring*> range ) const {
- for( mystring* p=range.begin(); p!=range.end(); ++p ) {
+ void operator()( const blocked_range<MyString*> range ) const {
+ for( MyString* p=range.begin(); p!=range.end(); ++p ) {
StringTable::accessor a;
table.insert( a, *p );
a->second += 1;
@@ -87,13 +88,13 @@ struct Tally {
}
};
-static mystring Data[N];
+static MyString Data[N];
static void CountOccurrences(int nthreads) {
StringTable table;
tick_count t0 = tick_count::now();
- parallel_for( blocked_range<mystring*>( Data, Data+N, 1000 ), Tally(table) );
+ parallel_for( blocked_range<MyString*>( Data, Data+N, 1000 ), Tally(table) );
tick_count t1 = tick_count::now();
int n = 0;
@@ -203,8 +204,8 @@ static void CreateData() {
Data[i] += GetLetters(type++, 1);
Data[i] += GetLetters(type, 2);
}
- mystring planet = Data[12]; planet[0] = toupper(planet[0]);
- mystring helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);
+ MyString planet = Data[12]; planet[0] = toupper(planet[0]);
+ MyString helloworld = Data[0]; helloworld[0] = toupper(helloworld[0]);
helloworld += ", "+Data[1]+" "+Data[2]+" "+Data[3]+" "+Data[4]+" "+Data[5];
printf("Message from planet '%s': %s!\nAnalyzing whole text...\n", planet.c_str(), helloworld.c_str());
}
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
index 198ee3c..f5a59d6 100644
--- a/examples/concurrent_hash_map/count_strings/index.html
+++ b/examples/concurrent_hash_map/count_strings/index.html
@@ -41,7 +41,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
index 72ca945..4dd6b6c 100644
--- a/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
+++ b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj b/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
index 21fe0f5..8a4d143 100644
--- a/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
+++ b/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj b/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj
index e7b87c3..dfe9c2c 100644
--- a/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj
+++ b/examples/concurrent_hash_map/count_strings/vc9/count_strings.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
index 7eaa5aa..6fef85e 100644
--- a/examples/concurrent_hash_map/index.html
+++ b/examples/concurrent_hash_map/index.html
@@ -13,7 +13,7 @@ This directory has examples of the template <code>concurrent_hash_map</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/index.html b/examples/index.html
index 0e41249..fee9b58 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -163,7 +163,7 @@ The environment may be set up, for a given type of shell window, by using one of
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_do/index.html b/examples/parallel_do/index.html
index aeb126d..7ec9d28 100644
--- a/examples/parallel_do/index.html
+++ b/examples/parallel_do/index.html
@@ -13,7 +13,7 @@ This directory has examples of the template <code>parallel_do</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_do/parallel_preorder/Graph.cpp b/examples/parallel_do/parallel_preorder/Graph.cpp
index 548025a..e642745 100644
--- a/examples/parallel_do/parallel_preorder/Graph.cpp
+++ b/examples/parallel_do/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_do/parallel_preorder/Graph.h b/examples/parallel_do/parallel_preorder/Graph.h
index 241c068..efab9a1 100644
--- a/examples/parallel_do/parallel_preorder/Graph.h
+++ b/examples/parallel_do/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/parallel_do/parallel_preorder/Makefile
index 8830701..251ce6e 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/parallel_do/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=parallel_preorder
+ARGS=1:4
# The C++ compiler
#CXX=g++
@@ -36,10 +37,10 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG) 1:4
+ ./$(PROG) $(ARGS)
diff --git a/examples/parallel_do/parallel_preorder/Makefile.windows b/examples/parallel_do/parallel_preorder/Makefile.windows
index 67c87d9..0abd775 100644
--- a/examples/parallel_do/parallel_preorder/Makefile.windows
+++ b/examples/parallel_do/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Parallel_Preorder
+ARGS=1:4
# The C++ compiler options
CXX = cl.exe
@@ -38,8 +39,8 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG) 1:4
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_do/parallel_preorder/Matrix.h b/examples/parallel_do/parallel_preorder/Matrix.h
index cdb69f4..b7b47e6 100644
--- a/examples/parallel_do/parallel_preorder/Matrix.h
+++ b/examples/parallel_do/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_do/parallel_preorder/index.html b/examples/parallel_do/parallel_preorder/index.html
index 9acd3ef..09060a3 100644
--- a/examples/parallel_do/parallel_preorder/index.html
+++ b/examples/parallel_do/parallel_preorder/index.html
@@ -82,7 +82,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
index 481ffa5..de4ea52 100644
--- a/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
+++ b/examples/parallel_do/parallel_preorder/parallel_preorder.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -169,7 +169,11 @@ int main( int argc, char* argv[] ) {
if (PauseFlag) {
printf ("Press return key to exit");
char c;
- scanf("%c", &c);
+ int n = scanf("%c", &c);
+ if( n!=1 ) {
+ fprintf(stderr,"Fatal error: unexpected end of input\n");
+ exit(1);
+ }
}
return 0;
diff --git a/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj b/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj
index 65d115f..0ceeb86 100644
--- a/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj
+++ b/examples/parallel_do/parallel_preorder/vc7.1/parallel_preorder.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj b/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj
index 09c1f1f..7c133d4 100644
--- a/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj
+++ b/examples/parallel_do/parallel_preorder/vc8/parallel_preorder.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj b/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj
index fc8aee1..60c345a 100644
--- a/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj
+++ b/examples/parallel_do/parallel_preorder/vc9/parallel_preorder.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_for/index.html b/examples/parallel_for/index.html
index f54ab6f..a917dc1 100644
--- a/examples/parallel_for/index.html
+++ b/examples/parallel_for/index.html
@@ -17,7 +17,7 @@ This directory has examples of the template <code>parallel_for</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_for/polygon_overlay/Makefile b/examples/parallel_for/polygon_overlay/Makefile
index 2fa726e..5f76a3c 100644
--- a/examples/parallel_for/polygon_overlay/Makefile
+++ b/examples/parallel_for/polygon_overlay/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
NAME=pover
+ARGS=
# The C++ compiler
#CXX=g++
@@ -83,7 +84,7 @@ release: $(GUIFILES) $(SRCFILES) resources
$(CXX) -O3 -DNDEBUG $(CXXFLAGS) -o $(EXE) $< *.cpp -ltbb -ltbbmalloc $(LIBS)
debug: $(GUIFILES) $(SRCFILES) resources
- $(CXX) -g -O0 -DTBB_DO_ASSERT -D_DEBUG $(CXXFLAGS) -o $(EXE) $< *.cpp -ltbb_debug -ltbbmalloc_debug $(LIBS)
+ $(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $< *.cpp -ltbb_debug -ltbbmalloc_debug $(LIBS)
clean:
rm -f $(EXE) *.o *.d
@@ -93,7 +94,7 @@ endif
test:
ifeq ($(UI),mac)
- export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(EXE)
+ export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(EXE) $(ARGS)
else
- $(EXE)
+ $(EXE) $(ARGS)
endif
diff --git a/examples/parallel_for/polygon_overlay/Makefile.windows b/examples/parallel_for/polygon_overlay/Makefile.windows
index 9363ede..9855781 100644
--- a/examples/parallel_for/polygon_overlay/Makefile.windows
+++ b/examples/parallel_for/polygon_overlay/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Pover
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -53,8 +54,8 @@ all: release test
release:
@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib tbbmalloc.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one
debug:
- @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_DO_ASSERT" LFLAGS="$(LDFLAGS) tbb_debug.lib tbbmalloc_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one
+ @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib tbbmalloc_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=pover SOURCE=*.cpp EXE=$(PROG).exe build_one
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest vc7.1\pover.res
test:
- $(PROG)
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_for/polygon_overlay/index.html b/examples/parallel_for/polygon_overlay/index.html
index 64a2fff..0508310 100644
--- a/examples/parallel_for/polygon_overlay/index.html
+++ b/examples/parallel_for/polygon_overlay/index.html
@@ -122,7 +122,7 @@ named pover.exe. To run these executables directly, use one or more of the foll
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_for/polygon_overlay/polymain.cpp b/examples/parallel_for/polygon_overlay/polymain.cpp
index c24c8fa..e75cc23 100644
--- a/examples/parallel_for/polygon_overlay/polymain.cpp
+++ b/examples/parallel_for/polygon_overlay/polymain.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/polymain.h b/examples/parallel_for/polygon_overlay/polymain.h
index f2890d3..47652b7 100644
--- a/examples/parallel_for/polygon_overlay/polymain.h
+++ b/examples/parallel_for/polygon_overlay/polymain.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/polyover.cpp b/examples/parallel_for/polygon_overlay/polyover.cpp
index c1f06ff..68da376 100644
--- a/examples/parallel_for/polygon_overlay/polyover.cpp
+++ b/examples/parallel_for/polygon_overlay/polyover.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/polyover.h b/examples/parallel_for/polygon_overlay/polyover.h
index bc4226b..3965712 100644
--- a/examples/parallel_for/polygon_overlay/polyover.h
+++ b/examples/parallel_for/polygon_overlay/polyover.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/pover_global.h b/examples/parallel_for/polygon_overlay/pover_global.h
index 240f249..35f4ddd 100644
--- a/examples/parallel_for/polygon_overlay/pover_global.h
+++ b/examples/parallel_for/polygon_overlay/pover_global.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/pover_video.cpp b/examples/parallel_for/polygon_overlay/pover_video.cpp
index e83e76a..9b647c7 100644
--- a/examples/parallel_for/polygon_overlay/pover_video.cpp
+++ b/examples/parallel_for/polygon_overlay/pover_video.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/pover_video.h b/examples/parallel_for/polygon_overlay/pover_video.h
index 31f039a..d2fd8bb 100644
--- a/examples/parallel_for/polygon_overlay/pover_video.h
+++ b/examples/parallel_for/polygon_overlay/pover_video.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/rpolygon.h b/examples/parallel_for/polygon_overlay/rpolygon.h
index 2c3ed6a..c1bb617 100644
--- a/examples/parallel_for/polygon_overlay/rpolygon.h
+++ b/examples/parallel_for/polygon_overlay/rpolygon.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/polygon_overlay/vc8/pover.vcproj b/examples/parallel_for/polygon_overlay/vc8/pover.vcproj
index b1108a0..7d7f28f 100644
--- a/examples/parallel_for/polygon_overlay/vc8/pover.vcproj
+++ b/examples/parallel_for/polygon_overlay/vc8/pover.vcproj
@@ -47,7 +47,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -130,7 +130,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -546,7 +546,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -630,7 +630,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/polygon_overlay/vc9/pover.vcproj b/examples/parallel_for/polygon_overlay/vc9/pover.vcproj
index f36d3d2..9e9702a 100644
--- a/examples/parallel_for/polygon_overlay/vc9/pover.vcproj
+++ b/examples/parallel_for/polygon_overlay/vc9/pover.vcproj
@@ -48,7 +48,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -292,7 +292,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -373,7 +373,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -623,7 +623,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
index 3883a82..3f38837 100644
--- a/examples/parallel_for/seismic/Makefile
+++ b/examples/parallel_for/seismic/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
NAME=seismic
+ARGS=- 300
# The C++ compiler
#CXX=g++
@@ -81,7 +82,7 @@ release: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb $(LIBS)
debug: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
- $(CXX) -g -O0 -DTBB_DO_ASSERT $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb_debug $(LIBS)
+ $(CXX) -g -O0 -DTBB_USE_DEBUG $(CXXFLAGS) -o $(EXE) $< SeismicSimulation.cpp -ltbb_debug $(LIBS)
clean:
rm -f $(EXE) *.o *.d
@@ -91,7 +92,7 @@ endif
test:
ifeq ($(UI),mac)
- export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(EXE) - 300
+ export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBSPATH)"; $(EXE) $(ARGS)
else
- $(EXE) - 300
+ $(EXE) $(ARGS)
endif
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
index fcfb08f..45c1590 100644
--- a/examples/parallel_for/seismic/Makefile.windows
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Seismic
+ARGS=- 300
# The C++ compiler options
CXX = cl.exe
@@ -53,8 +54,8 @@ all: release test
release:
@$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
debug:
- @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_DO_ASSERT" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
+ @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_USE_DEBUG" LFLAGS="$(LDFLAGS) tbb_debug.lib $(LIBS)" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest vc7.1\SeismicSimulation.res
test:
- $(PROG) - 300
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_for/seismic/SeismicSimulation.cpp b/examples/parallel_for/seismic/SeismicSimulation.cpp
index c36126e..38239aa 100644
--- a/examples/parallel_for/seismic/SeismicSimulation.cpp
+++ b/examples/parallel_for/seismic/SeismicSimulation.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/seismic/index.html b/examples/parallel_for/seismic/index.html
index 46c3b87..ec43cf3 100644
--- a/examples/parallel_for/seismic/index.html
+++ b/examples/parallel_for/seismic/index.html
@@ -96,7 +96,7 @@ user interface:
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
index 2cd94da..04d21f8 100644
--- a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
+++ b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
@@ -26,7 +26,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="0"
@@ -190,7 +190,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj b/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
index 44b0fd2..9aed8f4 100644
--- a/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
+++ b/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
@@ -47,7 +47,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -130,7 +130,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -546,7 +546,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -630,7 +630,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj b/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj
index 97d8b8b..7ce6aae 100644
--- a/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj
+++ b/examples/parallel_for/seismic/vc9/SeismicSimulation.vcproj
@@ -48,7 +48,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -292,7 +292,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -373,7 +373,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
@@ -623,7 +623,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""$(TBB21_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
- PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_USE_DEBUG"
RuntimeLibrary="3"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/tachyon/Makefile b/examples/parallel_for/tachyon/Makefile
index 47e2086..5a13e39 100644
--- a/examples/parallel_for/tachyon/Makefile
+++ b/examples/parallel_for/tachyon/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -166,7 +166,7 @@ endif
ifeq ($(ADD_TBB),1)
MYCXXFLAGS +=
ifeq ($(ADD_DEBUG),1)
-MYCXXFLAGS += -DTBB_DO_ASSERT
+MYCXXFLAGS += -DTBB_USE_DEBUG
LIBS += -ltbb_debug
else
LIBS += -ltbb
diff --git a/examples/parallel_for/tachyon/Makefile.windows b/examples/parallel_for/tachyon/Makefile.windows
index 0a10fa8..f590338 100644
--- a/examples/parallel_for/tachyon/Makefile.windows
+++ b/examples/parallel_for/tachyon/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -81,7 +81,7 @@ CXXFLAGS_TBB_NDEBUG = $(CXXFLAGS)
LIBS_TBB_NDEBUG = tbb.lib $(LIBS)
# Add these for tbb/tbb1d debug builds
-CXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_DO_ASSERT
+CXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_USE_DEBUG
LIBS_TBB_DEBUG = tbb_debug.lib $(LIBS)
diff --git a/examples/parallel_for/tachyon/index.html b/examples/parallel_for/tachyon/index.html
index 3675275..98d98bd 100644
--- a/examples/parallel_for/tachyon/index.html
+++ b/examples/parallel_for/tachyon/index.html
@@ -153,7 +153,7 @@ named tachyon.<<I>version</I>>.exe. To run these executables directly, us
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_for/tachyon/src/api.cpp b/examples/parallel_for/tachyon/src/api.cpp
index a875cee..b68ff8e 100644
--- a/examples/parallel_for/tachyon/src/api.cpp
+++ b/examples/parallel_for/tachyon/src/api.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/api.h b/examples/parallel_for/tachyon/src/api.h
index 32dcec3..acd3830 100644
--- a/examples/parallel_for/tachyon/src/api.h
+++ b/examples/parallel_for/tachyon/src/api.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/apigeom.cpp b/examples/parallel_for/tachyon/src/apigeom.cpp
index f46239a..e03c774 100644
--- a/examples/parallel_for/tachyon/src/apigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apigeom.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.cpp b/examples/parallel_for/tachyon/src/apitrigeom.cpp
index 556b149..bca7507 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.cpp
+++ b/examples/parallel_for/tachyon/src/apitrigeom.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/apitrigeom.h b/examples/parallel_for/tachyon/src/apitrigeom.h
index b816535..a61d4c8 100644
--- a/examples/parallel_for/tachyon/src/apitrigeom.h
+++ b/examples/parallel_for/tachyon/src/apitrigeom.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/bndbox.cpp b/examples/parallel_for/tachyon/src/bndbox.cpp
index 443c3b9..8d57525 100644
--- a/examples/parallel_for/tachyon/src/bndbox.cpp
+++ b/examples/parallel_for/tachyon/src/bndbox.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/bndbox.h b/examples/parallel_for/tachyon/src/bndbox.h
index ad428c0..3e5b265 100644
--- a/examples/parallel_for/tachyon/src/bndbox.h
+++ b/examples/parallel_for/tachyon/src/bndbox.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/box.cpp b/examples/parallel_for/tachyon/src/box.cpp
index f54a3af..5a38650 100644
--- a/examples/parallel_for/tachyon/src/box.cpp
+++ b/examples/parallel_for/tachyon/src/box.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/box.h b/examples/parallel_for/tachyon/src/box.h
index 7aa4fe6..33d72fd 100644
--- a/examples/parallel_for/tachyon/src/box.h
+++ b/examples/parallel_for/tachyon/src/box.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/camera.cpp b/examples/parallel_for/tachyon/src/camera.cpp
index afa6c9a..4e63179 100644
--- a/examples/parallel_for/tachyon/src/camera.cpp
+++ b/examples/parallel_for/tachyon/src/camera.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/camera.h b/examples/parallel_for/tachyon/src/camera.h
index b38e809..646303c 100644
--- a/examples/parallel_for/tachyon/src/camera.h
+++ b/examples/parallel_for/tachyon/src/camera.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/coordsys.cpp b/examples/parallel_for/tachyon/src/coordsys.cpp
index fa5cf1f..860ae73 100644
--- a/examples/parallel_for/tachyon/src/coordsys.cpp
+++ b/examples/parallel_for/tachyon/src/coordsys.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/coordsys.h b/examples/parallel_for/tachyon/src/coordsys.h
index aa2bdca..b938acb 100644
--- a/examples/parallel_for/tachyon/src/coordsys.h
+++ b/examples/parallel_for/tachyon/src/coordsys.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/cylinder.cpp b/examples/parallel_for/tachyon/src/cylinder.cpp
index 8179376..2bf4702 100644
--- a/examples/parallel_for/tachyon/src/cylinder.cpp
+++ b/examples/parallel_for/tachyon/src/cylinder.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/cylinder.h b/examples/parallel_for/tachyon/src/cylinder.h
index ba46461..6ec230a 100644
--- a/examples/parallel_for/tachyon/src/cylinder.h
+++ b/examples/parallel_for/tachyon/src/cylinder.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/extvol.cpp b/examples/parallel_for/tachyon/src/extvol.cpp
index a532786..dba8443 100644
--- a/examples/parallel_for/tachyon/src/extvol.cpp
+++ b/examples/parallel_for/tachyon/src/extvol.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/extvol.h b/examples/parallel_for/tachyon/src/extvol.h
index 74d9779..7883769 100644
--- a/examples/parallel_for/tachyon/src/extvol.h
+++ b/examples/parallel_for/tachyon/src/extvol.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/getargs.cpp b/examples/parallel_for/tachyon/src/getargs.cpp
index e981050..e3d6ca6 100644
--- a/examples/parallel_for/tachyon/src/getargs.cpp
+++ b/examples/parallel_for/tachyon/src/getargs.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/getargs.h b/examples/parallel_for/tachyon/src/getargs.h
index 09f651e..454557f 100644
--- a/examples/parallel_for/tachyon/src/getargs.h
+++ b/examples/parallel_for/tachyon/src/getargs.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/global.cpp b/examples/parallel_for/tachyon/src/global.cpp
index cb0394f..62695fd 100644
--- a/examples/parallel_for/tachyon/src/global.cpp
+++ b/examples/parallel_for/tachyon/src/global.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/global.h b/examples/parallel_for/tachyon/src/global.h
index 869c6bf..28b6239 100644
--- a/examples/parallel_for/tachyon/src/global.h
+++ b/examples/parallel_for/tachyon/src/global.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/grid.cpp b/examples/parallel_for/tachyon/src/grid.cpp
index 3811f60..194c1a2 100644
--- a/examples/parallel_for/tachyon/src/grid.cpp
+++ b/examples/parallel_for/tachyon/src/grid.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/grid.h b/examples/parallel_for/tachyon/src/grid.h
index 7c948e4..7243ac9 100644
--- a/examples/parallel_for/tachyon/src/grid.h
+++ b/examples/parallel_for/tachyon/src/grid.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/imageio.cpp b/examples/parallel_for/tachyon/src/imageio.cpp
index 81000ce..2fe1d3b 100644
--- a/examples/parallel_for/tachyon/src/imageio.cpp
+++ b/examples/parallel_for/tachyon/src/imageio.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/imageio.h b/examples/parallel_for/tachyon/src/imageio.h
index d8f2974..102cf66 100644
--- a/examples/parallel_for/tachyon/src/imageio.h
+++ b/examples/parallel_for/tachyon/src/imageio.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/imap.cpp b/examples/parallel_for/tachyon/src/imap.cpp
index 753a647..285bdd4 100644
--- a/examples/parallel_for/tachyon/src/imap.cpp
+++ b/examples/parallel_for/tachyon/src/imap.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/imap.h b/examples/parallel_for/tachyon/src/imap.h
index 21d4ac5..4590ddc 100644
--- a/examples/parallel_for/tachyon/src/imap.h
+++ b/examples/parallel_for/tachyon/src/imap.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/intersect.cpp b/examples/parallel_for/tachyon/src/intersect.cpp
index dd185af..6ac6d5d 100644
--- a/examples/parallel_for/tachyon/src/intersect.cpp
+++ b/examples/parallel_for/tachyon/src/intersect.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/intersect.h b/examples/parallel_for/tachyon/src/intersect.h
index 64efbf2..f208c01 100644
--- a/examples/parallel_for/tachyon/src/intersect.h
+++ b/examples/parallel_for/tachyon/src/intersect.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/jpeg.cpp b/examples/parallel_for/tachyon/src/jpeg.cpp
index 142cadf..51a1497 100644
--- a/examples/parallel_for/tachyon/src/jpeg.cpp
+++ b/examples/parallel_for/tachyon/src/jpeg.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/jpeg.h b/examples/parallel_for/tachyon/src/jpeg.h
index b5f0c22..234e024 100644
--- a/examples/parallel_for/tachyon/src/jpeg.h
+++ b/examples/parallel_for/tachyon/src/jpeg.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/light.cpp b/examples/parallel_for/tachyon/src/light.cpp
index 052c635..f7745f0 100644
--- a/examples/parallel_for/tachyon/src/light.cpp
+++ b/examples/parallel_for/tachyon/src/light.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/light.h b/examples/parallel_for/tachyon/src/light.h
index cdccaa6..a6a485f 100644
--- a/examples/parallel_for/tachyon/src/light.h
+++ b/examples/parallel_for/tachyon/src/light.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/machine.h b/examples/parallel_for/tachyon/src/machine.h
index e66fd87..75c9571 100644
--- a/examples/parallel_for/tachyon/src/machine.h
+++ b/examples/parallel_for/tachyon/src/machine.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/macros.h b/examples/parallel_for/tachyon/src/macros.h
index a21c172..87009ea 100644
--- a/examples/parallel_for/tachyon/src/macros.h
+++ b/examples/parallel_for/tachyon/src/macros.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/objbound.cpp b/examples/parallel_for/tachyon/src/objbound.cpp
index 7e68d92..820afc2 100644
--- a/examples/parallel_for/tachyon/src/objbound.cpp
+++ b/examples/parallel_for/tachyon/src/objbound.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/objbound.h b/examples/parallel_for/tachyon/src/objbound.h
index c1650b7..574aff5 100644
--- a/examples/parallel_for/tachyon/src/objbound.h
+++ b/examples/parallel_for/tachyon/src/objbound.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/parse.cpp b/examples/parallel_for/tachyon/src/parse.cpp
index 61917d6..12550f3 100644
--- a/examples/parallel_for/tachyon/src/parse.cpp
+++ b/examples/parallel_for/tachyon/src/parse.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/parse.h b/examples/parallel_for/tachyon/src/parse.h
index d263ba2..8b1e76e 100644
--- a/examples/parallel_for/tachyon/src/parse.h
+++ b/examples/parallel_for/tachyon/src/parse.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/plane.cpp b/examples/parallel_for/tachyon/src/plane.cpp
index 4b48e08..991470e 100644
--- a/examples/parallel_for/tachyon/src/plane.cpp
+++ b/examples/parallel_for/tachyon/src/plane.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/plane.h b/examples/parallel_for/tachyon/src/plane.h
index aab961a..173dc29 100644
--- a/examples/parallel_for/tachyon/src/plane.h
+++ b/examples/parallel_for/tachyon/src/plane.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ppm.cpp b/examples/parallel_for/tachyon/src/ppm.cpp
index 5e764aa..687c614 100644
--- a/examples/parallel_for/tachyon/src/ppm.cpp
+++ b/examples/parallel_for/tachyon/src/ppm.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ppm.h b/examples/parallel_for/tachyon/src/ppm.h
index 8b52ed1..6d1cd03 100644
--- a/examples/parallel_for/tachyon/src/ppm.h
+++ b/examples/parallel_for/tachyon/src/ppm.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/pthread.cpp b/examples/parallel_for/tachyon/src/pthread.cpp
index e4c60f2..8c75e13 100644
--- a/examples/parallel_for/tachyon/src/pthread.cpp
+++ b/examples/parallel_for/tachyon/src/pthread.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/pthread.h b/examples/parallel_for/tachyon/src/pthread.h
index c183c98..7fc054b 100644
--- a/examples/parallel_for/tachyon/src/pthread.h
+++ b/examples/parallel_for/tachyon/src/pthread.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/quadric.cpp b/examples/parallel_for/tachyon/src/quadric.cpp
index 6bd5be7..5c586de 100644
--- a/examples/parallel_for/tachyon/src/quadric.cpp
+++ b/examples/parallel_for/tachyon/src/quadric.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/quadric.h b/examples/parallel_for/tachyon/src/quadric.h
index 0d983c4..5dbd13e 100644
--- a/examples/parallel_for/tachyon/src/quadric.h
+++ b/examples/parallel_for/tachyon/src/quadric.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/render.cpp b/examples/parallel_for/tachyon/src/render.cpp
index 172a91e..45c5e45 100644
--- a/examples/parallel_for/tachyon/src/render.cpp
+++ b/examples/parallel_for/tachyon/src/render.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/render.h b/examples/parallel_for/tachyon/src/render.h
index bdacc9d..4460d8d 100644
--- a/examples/parallel_for/tachyon/src/render.h
+++ b/examples/parallel_for/tachyon/src/render.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ring.cpp b/examples/parallel_for/tachyon/src/ring.cpp
index 54f40ef..1ef57eb 100644
--- a/examples/parallel_for/tachyon/src/ring.cpp
+++ b/examples/parallel_for/tachyon/src/ring.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ring.h b/examples/parallel_for/tachyon/src/ring.h
index 0193967..2192598 100644
--- a/examples/parallel_for/tachyon/src/ring.h
+++ b/examples/parallel_for/tachyon/src/ring.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/shade.cpp b/examples/parallel_for/tachyon/src/shade.cpp
index 0fd381e..f24d308 100644
--- a/examples/parallel_for/tachyon/src/shade.cpp
+++ b/examples/parallel_for/tachyon/src/shade.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/shade.h b/examples/parallel_for/tachyon/src/shade.h
index 7721fa6..cc8fe7a 100644
--- a/examples/parallel_for/tachyon/src/shade.h
+++ b/examples/parallel_for/tachyon/src/shade.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/sphere.cpp b/examples/parallel_for/tachyon/src/sphere.cpp
index cc11af8..1816954 100644
--- a/examples/parallel_for/tachyon/src/sphere.cpp
+++ b/examples/parallel_for/tachyon/src/sphere.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/sphere.h b/examples/parallel_for/tachyon/src/sphere.h
index 7a8ab77..0056d01 100644
--- a/examples/parallel_for/tachyon/src/sphere.h
+++ b/examples/parallel_for/tachyon/src/sphere.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/texture.cpp b/examples/parallel_for/tachyon/src/texture.cpp
index 39cfe58..d8d931f 100644
--- a/examples/parallel_for/tachyon/src/texture.cpp
+++ b/examples/parallel_for/tachyon/src/texture.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/texture.h b/examples/parallel_for/tachyon/src/texture.h
index b0b0b88..1abfa44 100644
--- a/examples/parallel_for/tachyon/src/texture.h
+++ b/examples/parallel_for/tachyon/src/texture.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/tgafile.cpp b/examples/parallel_for/tachyon/src/tgafile.cpp
index f697946..99d0aa9 100644
--- a/examples/parallel_for/tachyon/src/tgafile.cpp
+++ b/examples/parallel_for/tachyon/src/tgafile.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/tgafile.h b/examples/parallel_for/tachyon/src/tgafile.h
index e9955b4..78c7c9a 100644
--- a/examples/parallel_for/tachyon/src/tgafile.h
+++ b/examples/parallel_for/tachyon/src/tgafile.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/trace.h b/examples/parallel_for/tachyon/src/trace.h
index a081987..1afc930 100644
--- a/examples/parallel_for/tachyon/src/trace.h
+++ b/examples/parallel_for/tachyon/src/trace.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/trace.serial.cpp b/examples/parallel_for/tachyon/src/trace.serial.cpp
index 98a7c39..613e090 100644
--- a/examples/parallel_for/tachyon/src/trace.serial.cpp
+++ b/examples/parallel_for/tachyon/src/trace.serial.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/trace.tbb.cpp b/examples/parallel_for/tachyon/src/trace.tbb.cpp
index 5f7001a..4feda24 100644
--- a/examples/parallel_for/tachyon/src/trace.tbb.cpp
+++ b/examples/parallel_for/tachyon/src/trace.tbb.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
index f64b154..aacb9c7 100644
--- a/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
+++ b/examples/parallel_for/tachyon/src/trace.tbb1d.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/trace_rest.cpp b/examples/parallel_for/tachyon/src/trace_rest.cpp
index 987137d..c3b7f73 100644
--- a/examples/parallel_for/tachyon/src/trace_rest.cpp
+++ b/examples/parallel_for/tachyon/src/trace_rest.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/triangle.cpp b/examples/parallel_for/tachyon/src/triangle.cpp
index 76b5a77..9a9ffbb 100644
--- a/examples/parallel_for/tachyon/src/triangle.cpp
+++ b/examples/parallel_for/tachyon/src/triangle.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/triangle.h b/examples/parallel_for/tachyon/src/triangle.h
index d9eb339..ec536fc 100644
--- a/examples/parallel_for/tachyon/src/triangle.h
+++ b/examples/parallel_for/tachyon/src/triangle.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/types.h b/examples/parallel_for/tachyon/src/types.h
index 29fff7d..28f0a1c 100644
--- a/examples/parallel_for/tachyon/src/types.h
+++ b/examples/parallel_for/tachyon/src/types.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ui.cpp b/examples/parallel_for/tachyon/src/ui.cpp
index c76cc80..0c24231 100644
--- a/examples/parallel_for/tachyon/src/ui.cpp
+++ b/examples/parallel_for/tachyon/src/ui.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/ui.h b/examples/parallel_for/tachyon/src/ui.h
index 2cd88e2..07a63c8 100644
--- a/examples/parallel_for/tachyon/src/ui.h
+++ b/examples/parallel_for/tachyon/src/ui.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/util.cpp b/examples/parallel_for/tachyon/src/util.cpp
index 3d21f60..518d960 100644
--- a/examples/parallel_for/tachyon/src/util.cpp
+++ b/examples/parallel_for/tachyon/src/util.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/util.h b/examples/parallel_for/tachyon/src/util.h
index 35661e5..a00889f 100644
--- a/examples/parallel_for/tachyon/src/util.h
+++ b/examples/parallel_for/tachyon/src/util.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/vector.cpp b/examples/parallel_for/tachyon/src/vector.cpp
index c6ab1c1..b4d1fad 100644
--- a/examples/parallel_for/tachyon/src/vector.cpp
+++ b/examples/parallel_for/tachyon/src/vector.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/vector.h b/examples/parallel_for/tachyon/src/vector.h
index 8c92ee0..fddf584 100644
--- a/examples/parallel_for/tachyon/src/vector.h
+++ b/examples/parallel_for/tachyon/src/vector.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/video.cpp b/examples/parallel_for/tachyon/src/video.cpp
index 4ffff24..4eed93d 100644
--- a/examples/parallel_for/tachyon/src/video.cpp
+++ b/examples/parallel_for/tachyon/src/video.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/video.h b/examples/parallel_for/tachyon/src/video.h
index 0533611..9bc633b 100644
--- a/examples/parallel_for/tachyon/src/video.h
+++ b/examples/parallel_for/tachyon/src/video.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/vol.cpp b/examples/parallel_for/tachyon/src/vol.cpp
index 155c826..6fe32e3 100644
--- a/examples/parallel_for/tachyon/src/vol.cpp
+++ b/examples/parallel_for/tachyon/src/vol.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/src/vol.h b/examples/parallel_for/tachyon/src/vol.h
index 761edc5..14083f5 100644
--- a/examples/parallel_for/tachyon/src/vol.h
+++ b/examples/parallel_for/tachyon/src/vol.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj b/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj
index 2f7b170..031ad70 100644
--- a/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj
+++ b/examples/parallel_for/tachyon/vc7.1/tachyon.serial.vcproj
@@ -37,6 +37,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
@@ -89,6 +90,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib"
LinkIncremental="1"
SubSystem="2"
OptimizeReferences="2"
@@ -141,6 +143,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
SubSystem="2"
@@ -195,6 +198,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
GenerateDebugInformation="TRUE"
diff --git a/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj b/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj
index 172e54c..32b0486 100644
--- a/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj
+++ b/examples/parallel_for/tachyon/vc7.1/tachyon.tbb.vcproj
@@ -24,7 +24,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
@@ -38,7 +38,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
GenerateDebugInformation="TRUE"
@@ -94,7 +94,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
SubSystem="2"
@@ -150,7 +150,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
LinkIncremental="1"
AdditionalLibraryDirectories=""$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
SubSystem="2"
@@ -194,7 +194,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
@@ -208,7 +208,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
LinkIncremental="1"
AdditionalLibraryDirectories=""$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
GenerateDebugInformation="TRUE"
diff --git a/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj b/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj
index 6d0d716..c4d7603 100644
--- a/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj
+++ b/examples/parallel_for/tachyon/vc7.1/tachyon.tbb1d.vcproj
@@ -24,7 +24,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
@@ -38,7 +38,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
GenerateDebugInformation="TRUE"
@@ -94,7 +94,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
LinkIncremental="1"
AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
SubSystem="2"
@@ -150,7 +150,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb.lib"
LinkIncremental="1"
AdditionalLibraryDirectories=""$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
SubSystem="2"
@@ -194,7 +194,7 @@
FavorSizeOrSpeed="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableFunctionLevelLinking="TRUE"
@@ -208,7 +208,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
+ AdditionalDependencies="$(OutDir)/tachyon.common.lib tbb_debug.lib"
LinkIncremental="1"
AdditionalLibraryDirectories=""$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
GenerateDebugInformation="TRUE"
diff --git a/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj b/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj
index 84f9c74..48c5137 100644
--- a/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj
+++ b/examples/parallel_for/tachyon/vc8/tachyon.tbb.vcproj
@@ -48,7 +48,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -136,7 +136,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
@@ -563,7 +563,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -651,7 +651,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj b/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj
index dbcf2de..fb40780 100644
--- a/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj
+++ b/examples/parallel_for/tachyon/vc8/tachyon.tbb1d.vcproj
@@ -48,7 +48,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -136,7 +136,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
@@ -563,7 +563,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -651,7 +651,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj b/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj
index 6456c86..c733172 100644
--- a/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj
+++ b/examples/parallel_for/tachyon/vc9/tachyon.tbb.vcproj
@@ -49,7 +49,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -302,7 +302,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -388,7 +388,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
@@ -644,7 +644,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj b/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj
index bb4d020..4b21001 100644
--- a/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj
+++ b/examples/parallel_for/tachyon/vc9/tachyon.tbb1d.vcproj
@@ -49,7 +49,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -302,7 +302,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
EnableEnhancedInstructionSet="2"
@@ -388,7 +388,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
@@ -644,7 +644,7 @@
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ PreprocessorDefinitions="TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
index 3c71ea0..7efebf7 100644
--- a/examples/parallel_reduce/convex_hull/Makefile
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,6 +25,8 @@
# the GNU General Public License.
# GNU Makefile that builds and runs example.
+PROG=convex_hull_bench
+ARGS=
# The C++ compiler
#CXX=g++
@@ -36,11 +38,11 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug $(LIBS)
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug $(LIBS)
clean:
rm -f convex_hull_bench convex_hull_sample *.o *.d
test:
- ./convex_hull_bench
+ ./$(PROG) $(ARGS)
diff --git a/examples/parallel_reduce/convex_hull/Makefile.windows b/examples/parallel_reduce/convex_hull/Makefile.windows
index 8851a48..0ec6df8 100644
--- a/examples/parallel_reduce/convex_hull/Makefile.windows
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,8 +25,8 @@
# the GNU General Public License.
# Common Makefile that builds and runs example.
-
-# Just specify your program basename
+PROG=convex_hull_bench
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -38,9 +38,9 @@ release:
$(CXX) convex_hull_sample.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe
$(CXX) convex_hull_bench.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe
debug:
- $(CXX) convex_hull_sample.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe
- $(CXX) convex_hull_bench.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe
+ $(CXX) convex_hull_sample.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_sample.exe
+ $(CXX) convex_hull_bench.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:convex_hull_bench.exe
clean:
@cmd.exe /C del convex_hull*.exe *.obj *.?db *.manifest
test:
- convex_hull_bench
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_reduce/convex_hull/convex_hull.h b/examples/parallel_reduce/convex_hull/convex_hull.h
index d14a296..392ee6e 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull.h
+++ b/examples/parallel_reduce/convex_hull/convex_hull.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -150,7 +150,7 @@ namespace util {
template < typename T >
point<T> GenerateRNDPoint(size_t& count, unsigned int& rseed) {
/* generates random points on 2D plane so that the cluster
- is somewhat cirle shaped */
+ is somewhat circle shaped */
const size_t maxsize=500;
T x = random(rseed)*2.0/(double)RAND_MAX - 1;
T y = random(rseed)*2.0/(double)RAND_MAX - 1;
@@ -221,7 +221,7 @@ namespace util {
void WriteResults(int nthreads, double initTime, double calcTime) {
if(VERBOSE) {
- cout << " Step by step hull constuction:" << endl;
+ cout << " Step by step hull construction:" << endl;
for(size_t i = 0; i < OUTPUT.size(); ++i)
cout << OUTPUT[i] << endl;
}
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
index f46de6d..27196bb 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
+++ b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
index 17a95d1..c70402a 100644
--- a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
+++ b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_reduce/convex_hull/index.html b/examples/parallel_reduce/convex_hull/index.html
index 1b0c395..3038b45 100644
--- a/examples/parallel_reduce/convex_hull/index.html
+++ b/examples/parallel_reduce/convex_hull/index.html
@@ -46,7 +46,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
index 379b9b8..56b25e5 100644
--- a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
@@ -20,7 +20,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
index 710f7d4..d3eece4 100644
--- a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
@@ -20,7 +20,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj b/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
index 9dfa429..795e83f 100644
--- a/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj b/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
index 5af6ed6..6efd011 100644
--- a/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj b/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj
index 71e62f1..ec7ed1c 100644
--- a/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc9/convex_hull_benchmark.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -198,7 +198,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj b/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj
index cdee21d..c490002 100644
--- a/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj
+++ b/examples/parallel_reduce/convex_hull/vc9/convex_hull_sample.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -198,7 +198,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
index 94b3f96..6843c14 100644
--- a/examples/parallel_reduce/index.html
+++ b/examples/parallel_reduce/index.html
@@ -15,7 +15,7 @@ This directory has examples of the template <code>parallel_reduce</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_reduce/primes/Makefile b/examples/parallel_reduce/primes/Makefile
index ed74d86..35ba6d6 100644
--- a/examples/parallel_reduce/primes/Makefile
+++ b/examples/parallel_reduce/primes/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=primes
+ARGS=100000000 0:4
# The C++ compiler
#CXX=g++
@@ -36,10 +37,10 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG) 100000000 0:4
+ ./$(PROG) $(ARGS)
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
index 8325bf4..444696d 100644
--- a/examples/parallel_reduce/primes/Makefile.windows
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Primes
+ARGS=100000000 0:4
# The C++ compiler options
CXX = cl.exe
@@ -38,8 +39,8 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG) 100000000 0:4
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_reduce/primes/index.html b/examples/parallel_reduce/primes/index.html
index 8ad48eb..d3e7a88 100644
--- a/examples/parallel_reduce/primes/index.html
+++ b/examples/parallel_reduce/primes/index.html
@@ -42,7 +42,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_reduce/primes/primes.cpp b/examples/parallel_reduce/primes/primes.cpp
index a0db26d..a9aa6fd 100644
--- a/examples/parallel_reduce/primes/primes.cpp
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_reduce/primes/vc7.1/primes.vcproj b/examples/parallel_reduce/primes/vc7.1/primes.vcproj
index 0a64d5e..955b4f2 100644
--- a/examples/parallel_reduce/primes/vc7.1/primes.vcproj
+++ b/examples/parallel_reduce/primes/vc7.1/primes.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/parallel_reduce/primes/vc8/primes.vcproj b/examples/parallel_reduce/primes/vc8/primes.vcproj
index f782c49..a0d51b7 100644
--- a/examples/parallel_reduce/primes/vc8/primes.vcproj
+++ b/examples/parallel_reduce/primes/vc8/primes.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_reduce/primes/vc9/primes.vcproj b/examples/parallel_reduce/primes/vc9/primes.vcproj
index 7713089..04ca794 100644
--- a/examples/parallel_reduce/primes/vc9/primes.vcproj
+++ b/examples/parallel_reduce/primes/vc9/primes.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_while/index.html b/examples/parallel_while/index.html
index 6c9284c..a7b7d78 100644
--- a/examples/parallel_while/index.html
+++ b/examples/parallel_while/index.html
@@ -13,7 +13,7 @@ This directory has examples of the template <code>parallel_while</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_while/parallel_preorder/Graph.cpp b/examples/parallel_while/parallel_preorder/Graph.cpp
index 548025a..e642745 100644
--- a/examples/parallel_while/parallel_preorder/Graph.cpp
+++ b/examples/parallel_while/parallel_preorder/Graph.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_while/parallel_preorder/Graph.h b/examples/parallel_while/parallel_preorder/Graph.h
index 241c068..efab9a1 100644
--- a/examples/parallel_while/parallel_preorder/Graph.h
+++ b/examples/parallel_while/parallel_preorder/Graph.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_while/parallel_preorder/Makefile b/examples/parallel_while/parallel_preorder/Makefile
index 8830701..251ce6e 100644
--- a/examples/parallel_while/parallel_preorder/Makefile
+++ b/examples/parallel_while/parallel_preorder/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=parallel_preorder
+ARGS=1:4
# The C++ compiler
#CXX=g++
@@ -36,10 +37,10 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG) 1:4
+ ./$(PROG) $(ARGS)
diff --git a/examples/parallel_while/parallel_preorder/Makefile.windows b/examples/parallel_while/parallel_preorder/Makefile.windows
index 67c87d9..0abd775 100644
--- a/examples/parallel_while/parallel_preorder/Makefile.windows
+++ b/examples/parallel_while/parallel_preorder/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Parallel_Preorder
+ARGS=1:4
# The C++ compiler options
CXX = cl.exe
@@ -38,8 +39,8 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG) 1:4
+ $(PROG) $(ARGS)
diff --git a/examples/parallel_while/parallel_preorder/Matrix.h b/examples/parallel_while/parallel_preorder/Matrix.h
index cdb69f4..b7b47e6 100644
--- a/examples/parallel_while/parallel_preorder/Matrix.h
+++ b/examples/parallel_while/parallel_preorder/Matrix.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/parallel_while/parallel_preorder/index.html b/examples/parallel_while/parallel_preorder/index.html
index e0b2a9a..4a64acb 100644
--- a/examples/parallel_while/parallel_preorder/index.html
+++ b/examples/parallel_while/parallel_preorder/index.html
@@ -83,7 +83,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_while/parallel_preorder/parallel_preorder.cpp b/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
index 88c53e4..f129b75 100644
--- a/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
+++ b/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -34,6 +34,7 @@
#include <vector>
#include <algorithm>
#include <cstring>
+#include <cstdio>
#include "Graph.h"
using namespace std;
@@ -184,7 +185,11 @@ int main( int argc, char* argv[] ) {
if (PauseFlag) {
printf ("Press return key to exit");
char c;
- scanf("%c", &c);
+ int n = scanf("%c", &c);
+ if( n!=1 ) {
+ fprintf(stderr,"Fatal error: unexpected end of input\n");
+ exit(1);
+ }
}
return 0;
diff --git a/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
index 65d115f..0ceeb86 100644
--- a/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
+++ b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
index 09c1f1f..7c133d4 100644
--- a/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
+++ b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj b/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj
index fc8aee1..60c345a 100644
--- a/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj
+++ b/examples/parallel_while/parallel_preorder/vc9/parallel_preorder.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
index 90ae870..d7ae979 100644
--- a/examples/pipeline/index.html
+++ b/examples/pipeline/index.html
@@ -13,7 +13,7 @@ This directory has examples of the template <code>pipeline</code>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/parallel_do/parallel_preorder/Makefile b/examples/pipeline/square/Makefile
similarity index 78%
copy from examples/parallel_do/parallel_preorder/Makefile
copy to examples/pipeline/square/Makefile
index 8830701..e6d9d5e 100644
--- a/examples/parallel_do/parallel_preorder/Makefile
+++ b/examples/pipeline/square/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -25,21 +25,27 @@
# the GNU General Public License.
# GNU Makefile that builds and runs example.
-PROG=parallel_preorder
+PROG=square
+ARGS=input.txt output.txt
# The C++ compiler
#CXX=g++
+SQUARE = square.cpp
all: release test
-release: *.cpp
+release: $(SQUARE)
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
-debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+debug: $(SQUARE)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
- rm -f $(PROG) *.o *.d
+ rm -f $(PROG) *.o *.d input.txt output.txt gen_input
-test:
- ./$(PROG) 1:4
+gen_input: gen_input.cpp
+ $(CXX) -O2 $(CXXFLAGS) -o $@ $^ $(LIBS)
+
+test: gen_input
+ ./gen_input >input.txt
+ ./$(PROG) $(ARGS)
diff --git a/examples/pipeline/text_filter/Makefile.windows b/examples/pipeline/square/Makefile.windows
similarity index 74%
copy from examples/pipeline/text_filter/Makefile.windows
copy to examples/pipeline/square/Makefile.windows
index a9f8f07..15e6fe6 100644
--- a/examples/pipeline/text_filter/Makefile.windows
+++ b/examples/pipeline/square/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -27,23 +27,25 @@
# Common Makefile that builds and runs example.
# Just specify your program basename
-PROG=Text_Filter
+PROG=square
+ARGS=input.txt output.txt
# The C++ compiler options
CXX = cl.exe
-MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYCXXFLAGS = /TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS) /D _CRT_SECURE_NO_DEPRECATE
MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+SQUARE = square.cpp
all: release test
release:
- $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) $(SQUARE) /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) $(SQUARE) /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
- @cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest
-input.txt:
- @echo Constructing input.txt
- @cmd.exe /C "@type index.html >input.txt"
- @-cmd.exe /C "for /L %%a in (1,1,500) do @type index.html >> input.txt"
+ @cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest gen_input.exe
+gen_input.exe: gen_input.cpp
+ $(CXX) gen_input.cpp
+input.txt: gen_input.exe
+ gen_input.exe > input.txt
test: input.txt
- $(PROG) input.txt output.txt
+ $(PROG) $(ARGS)
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/pipeline/square/gen_input.cpp
similarity index 77%
copy from examples/task/tree_sum/SerialSumTree.cpp
copy to examples/pipeline/square/gen_input.cpp
index 1a8897e..e46706d 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/pipeline/square/gen_input.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,13 +26,18 @@
the GNU General Public License.
*/
-#include "common.h"
+#include <stdlib.h>
+#include <stdio.h>
-Value SerialSumTree( TreeNode* root ) {
- Value result = root->value;
- if( root->left )
- result += SerialSumTree(root->left);
- if( root->right )
- result += SerialSumTree(root->right);
- return result;
+//! Generates sample input for square.cpp
+int main( int argc, char* argv[] ) {
+ long num = argc>1 ? atol(argv[1]) : 1000000;
+ int a=0;
+ int b=1;
+ for( long j=0; j<num; ++j ) {
+ printf("%u\n",a);
+ b+=a;
+ a=(b-a)%10000;
+ }
+ return 0;
}
diff --git a/examples/pipeline/text_filter/index.html b/examples/pipeline/square/index.html
similarity index 67%
copy from examples/pipeline/text_filter/index.html
copy to examples/pipeline/square/index.html
index d967d2f..d38dccb 100644
--- a/examples/pipeline/text_filter/index.html
+++ b/examples/pipeline/square/index.html
@@ -2,13 +2,17 @@
<BODY>
<H2>Overview</H2>
-Text filter that demonstrates class pipeline.
+Text filter that demonstrates class pipeline. Example program
+reads a file contains decimal integers in text format and changes each
+to its square.
The <A href=" ../../../doc/Tutorial.pdf">Tutorial</A> explains this example in detail.
<H2>Files</H2>
<DL>
-<DT><A HREF="text_filter.cpp">text_filter.cpp</A>
+<DT><A HREF="square.cpp">square.cpp</A>
<DD>Source code for example.
+<DT><A HREF="gen_input.cpp">gen_input.cpp </A>
+<DD>Source code for sample input generation.
<DT><A HREF="Makefile">Makefile</A>
<DD>Makefile for building example.
</DL>
@@ -31,22 +35,23 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<H2>Usage</H2>
<DL>
-<DT><TT>text_filter <I>inputfile</I> <I>outputfile</I> <I>N</I></TT>
-<DD>Run the example on the named <I>inputfile</I> and produce the named <I>outputfile</I>.
- <I>N</I> is the number of threads to be used.
+<DT><TT>square <I>inputfile</I> <I>outputfile</I> <I>N</I></TT>
+<DD>Run the example on the named <I>inputfile</I> (optional, default value is "input.txt") and produce the named <I>outputfile</I> (optional, default value is "output.txt").
+ <I>N</I> is the number of threads to be used (optional).
+
<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
<DD>Build a <I>debug</I> version of the example
(see the <A HREF=../../index.html#build>build directions</A>).
- <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (e.g., by concatenating all the index.html
- files in the examples/ directory tree).
+ <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (e.g., by
+ <TT>gen_input 5000</TT>).
<BR>Run it with this <I>inputfile</I> and the desired number of threads,
- e.g., <TT>text_filter <I>inputfile</I> <I>outputfile</I> 4</TT>.
+ e.g., <TT>square <I>inputfile</I> <I>outputfile</I> 4</TT>.
</DL>
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/pipeline/text_filter/text_filter.cpp b/examples/pipeline/square/square.cpp
similarity index 58%
copy from examples/pipeline/text_filter/text_filter.cpp
copy to examples/pipeline/square/square.cpp
index 197dd2d..1a19ccf 100644
--- a/examples/pipeline/text_filter/text_filter.cpp
+++ b/examples/pipeline/square/square.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,12 +27,13 @@
*/
//
-// Example program that reads a file of text and changes the first letter
-// of each word to upper case.
+// Example program that reads a file of decimal integers in text format
+// and changes each to its square.
//
#include "tbb/pipeline.h"
#include "tbb/tick_count.h"
#include "tbb/task_scheduler_init.h"
+#include "tbb/tbb_allocator.h"
#include <cstring>
#include <cstdlib>
#include <cstdio>
@@ -40,62 +41,93 @@
using namespace std;
-//! Buffer that holds block of characters and last character of previous buffer.
-class MyBuffer {
- static const size_t buffer_size = 10000;
- char* my_end;
- //! storage[0] holds the last character of the previous buffer.
- char storage[1+buffer_size];
+//! Holds a slice of text.
+/** Instances *must* be allocated/freed using methods herein, because the C++ declaration
+ represents only the header of a much larger object in memory. */
+class TextSlice {
+ //! Pointer to one past last character in slice
+ char* logical_end;
+ //! Pionter to one past last available byte in slice.
+ char* physical_end;
public:
- //! Pointer to first character in the buffer
- char* begin() {return storage+1;}
- const char* begin() const {return storage+1;}
- //! Pointer to one past last character in the buffer
- char* end() const {return my_end;}
- //! Set end of buffer.
- void set_end( char* new_ptr ) {my_end=new_ptr;}
- //! Number of bytes a buffer can hold
- size_t max_size() const {return buffer_size;}
- //! Number of bytes appended to buffer.
- size_t size() const {return my_end-begin();}
+ //! Allocate a TextSlice object that can hold up to max_size characters.
+ static TextSlice* allocate( size_t max_size ) {
+ // +1 leaves room for a terminating null character.
+ TextSlice* t = (TextSlice*)tbb::tbb_allocator<char>().allocate( sizeof(TextSlice)+max_size+1 );
+ t->logical_end = t->begin();
+ t->physical_end = t->begin()+max_size;
+ return t;
+ }
+ //! Free a TextSlice object
+ void free() {
+ tbb::tbb_allocator<char>().deallocate((char*)this,size());
+ }
+ //! Pointer to beginning of sequence
+ char* begin() {return (char*)(this+1);}
+ //! Pointer to one past last character in sequence
+ char* end() {return logical_end;}
+ //! Length of sequence
+ size_t size() const {return logical_end-(char*)(this+1);}
+ //! Maximum number of characters that can be appended to sequkence
+ size_t avail() const {return physical_end-logical_end;}
+ //! Append sequence [first,last) to this sequence.
+ void append( char* first, char* last ) {
+ memcpy( logical_end, first, last-first );
+ logical_end += last-first;
+ }
+ //! Set end to given value.
+ void set_end( char* p ) {logical_end=p;}
};
+const size_t MAX_CHAR_PER_INPUT_SLICE = 4000;
+static const char* InputFileName = "input.txt";
+static const char* OutputFileName = "output.txt";
+
class MyInputFilter: public tbb::filter {
public:
- static const size_t n_buffer = 8;
MyInputFilter( FILE* input_file_ );
+ ~MyInputFilter();
private:
FILE* input_file;
- size_t next_buffer;
- char last_char_of_previous_buffer;
- MyBuffer buffer[n_buffer];
+ TextSlice* next_slice;
/*override*/ void* operator()(void*);
};
MyInputFilter::MyInputFilter( FILE* input_file_ ) :
filter(/*is_serial=*/true),
- next_buffer(0),
input_file(input_file_),
- last_char_of_previous_buffer(' ')
+ next_slice( TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE ) )
{
}
+MyInputFilter::~MyInputFilter() {
+ next_slice->free();
+}
+
void* MyInputFilter::operator()(void*) {
- MyBuffer& b = buffer[next_buffer];
- next_buffer = (next_buffer+1) % n_buffer;
- size_t n = fread( b.begin(), 1, b.max_size(), input_file );
- if( !n ) {
- // end of file
+ // Read characters into space that is available in the next slice.
+ size_t m = next_slice->avail();
+ size_t n = fread( next_slice->end(), 1, m, input_file );
+ if( !n && next_slice->size()==0 ) {
+ // No more characters to process
return NULL;
} else {
- b.begin()[-1] = last_char_of_previous_buffer;
- last_char_of_previous_buffer = b.begin()[n-1];
- b.set_end( b.begin()+n );
- return &b;
+ // Have more characters to process.
+ TextSlice& t = *next_slice;
+ next_slice = TextSlice::allocate( MAX_CHAR_PER_INPUT_SLICE );
+ char* p = t.end()+n;
+ if( n==m ) {
+ // Might have read partial number. If so, transfer characters of partial number to next slice.
+ while( p>t.begin() && isdigit(p[-1]) )
+ --p;
+ next_slice->append( p, t.end()+n );
+ }
+ t.set_end(p);
+ return &t;
}
}
-
-//! Filter that changes the first letter of each word from lower case to upper case.
+
+//! Filter that changes each decimal number to its square.
class MyTransformFilter: public tbb::filter {
public:
MyTransformFilter();
@@ -107,14 +139,28 @@ MyTransformFilter::MyTransformFilter() :
{}
/*override*/void* MyTransformFilter::operator()( void* item ) {
- MyBuffer& b = *static_cast<MyBuffer*>(item);
- int prev_char_is_space = b.begin()[-1]==' ';
- for( char* s=b.begin(); s!=b.end(); ++s ) {
- if( prev_char_is_space && islower((unsigned char)*s) )
- *s = toupper(*s);
- prev_char_is_space = isspace((unsigned char)*s);
+ TextSlice& input = *static_cast<TextSlice*>(item);
+ // Add terminating NULL so that strtol works right even if number is at end of the input.
+ *input.end() = '\0';
+ char* p = input.begin();
+ TextSlice& output = *TextSlice::allocate( 2*MAX_CHAR_PER_INPUT_SLICE );
+ char* q = output.begin();
+ for(;;) {
+ while( p<input.end() && !isdigit(*p) )
+ *q++ = *p++;
+ if( p==input.end() )
+ break;
+ long x = strtol( p, &p, 10 );
+ // Note: no overflow checking is needed here, as we have twice the
+ // input string length, but the square of a non-negative integer n
+ // cannot have more than twice as many digits as n.
+ long y = x*x;
+ sprintf(q,"%ld",y);
+ q = strchr(q,0);
}
- return &b;
+ output.set_end(q);
+ input.free();
+ return &output;
}
//! Filter that writes each buffer to a file.
@@ -132,19 +178,22 @@ MyOutputFilter::MyOutputFilter( FILE* output_file ) :
}
void* MyOutputFilter::operator()( void* item ) {
- MyBuffer& b = *static_cast<MyBuffer*>(item);
- fwrite( b.begin(), 1, b.size(), my_output_file );
+ TextSlice& output = *static_cast<TextSlice*>(item);
+ int n = fwrite( output.begin(), 1, output.size(), my_output_file );
+ if( n<=0 ) {
+ fprintf(stderr,"Can't write into %s file\n", OutputFileName);
+ exit(1);
+ }
+ output.free();
return NULL;
}
static int NThread = tbb::task_scheduler_init::automatic;
-static const char* InputFileName = "input.txt";
-static const char* OutputFileName = "output.txt";
static bool is_number_of_threads_set = false;
void Usage()
{
- fprintf( stderr, "Usage:\ttext_filter [input-file [output-file [nthread]]]\n");
+ fprintf( stderr, "Usage:\tsquare [input-file [output-file [nthread]]]\n");
}
int ParseCommandLine( int argc, char* argv[] ) {
@@ -197,7 +246,7 @@ int run_pipeline( int nthreads )
// Run the pipeline
tbb::tick_count t0 = tbb::tick_count::now();
- pipeline.run( MyInputFilter::n_buffer );
+ pipeline.run( NThread );
tbb::tick_count t1 = tbb::tick_count::now();
// Remove filters from pipeline before they are implicitly destroyed.
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj b/examples/pipeline/square/vc7.1/gen_input.vcproj
similarity index 70%
copy from examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
copy to examples/pipeline/square/vc7.1/gen_input.vcproj
index 379b9b8..32faff4 100644
--- a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
+++ b/examples/pipeline/square/vc7.1/gen_input.vcproj
@@ -2,8 +2,8 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
- Name="convex_hull_bench"
- ProjectGUID="{6DF21C04-95F4-4FF0-89F3-3688888E10D5}"
+ Name="gen_input"
+ ProjectGUID="{9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -19,29 +19,28 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
UsePrecompiledHeader="0"
+ WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
+ DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
+ OutputFile="$(OutDir)/gen_input.exe"
+ LinkIncremental="2"
GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/gen_input.pdb"
SubSystem="1"
- TargetMachine="1"
- FixedBaseAddress="1"/>
+ TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
- Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
@@ -67,29 +66,27 @@
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
+ RuntimeLibrary="4"
UsePrecompiledHeader="0"
- Detect64BitPortabilityProblems="TRUE"/>
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ OutputFile="$(OutDir)/gen_input.exe"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
- TargetMachine="1"
- FixedBaseAddress="1"/>
+ TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
- Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
@@ -116,16 +113,13 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
- RelativePath="..\convex_hull_bench.cpp">
+ RelativePath="..\gen_input.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath="..\convex_hull.h">
- </File>
</Filter>
<Filter
Name="Resource Files"
diff --git a/examples/pipeline/square/vc7.1/square.sln b/examples/pipeline/square/vc7.1/square.sln
new file mode 100644
index 0000000..ddfee6a
--- /dev/null
+++ b/examples/pipeline/square/vc7.1/square.sln
@@ -0,0 +1,30 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B} = {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.ActiveCfg = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.Build.0 = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.ActiveCfg = Release|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.Build.0 = Release|Win32
+ {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Debug.ActiveCfg = Debug|Win32
+ {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Debug.Build.0 = Debug|Win32
+ {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Release.ActiveCfg = Release|Win32
+ {9B2DC020-BBF7-463B-AD0B-0D4ACF49100B}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/text_filter/vc7.1/text_filter.vcproj b/examples/pipeline/square/vc7.1/square.vcproj
similarity index 89%
copy from examples/pipeline/text_filter/vc7.1/text_filter.vcproj
copy to examples/pipeline/square/vc7.1/square.vcproj
index 74ed993..7da592f 100644
--- a/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
+++ b/examples/pipeline/square/vc7.1/square.vcproj
@@ -2,9 +2,9 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
- Name="text_filter"
+ Name="square"
ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
- RootNamespace="text_filter"
+ RootNamespace="square"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
@@ -29,7 +29,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt"
+ AdditionalDependencies="gen_input.exe"
Outputs=""$(OutDir)\input.txt""/>
<Tool
Name="VCLinkerTool"
@@ -79,7 +80,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="copy "$(TBB21_INSTALL_DIR)\doc\*.txt"+"$(TBB21_INSTALL_DIR)\doc\html\*.html" "$(OutDir)\input.txt" >NUL
+"
Outputs=""$(OutDir)\input.txt""/>
<Tool
Name="VCLinkerTool"
@@ -123,7 +125,7 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
- RelativePath="..\text_filter.cpp">
+ RelativePath="..\square.cpp">
</File>
</Filter>
<File
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj b/examples/pipeline/square/vc8/gen_input.vcproj
similarity index 75%
copy from examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
copy to examples/pipeline/square/vc8/gen_input.vcproj
index 51b858a..a066160 100644
--- a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
+++ b/examples/pipeline/square/vc8/gen_input.vcproj
@@ -2,9 +2,9 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
- Name="sub_string_finder"
- ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2525}"
- RootNamespace="sub_string_finder"
+ Name="gen_input"
+ ProjectGUID="{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+ RootNamespace="gen_input"
Keyword="Win32Proj"
>
<Platforms>
@@ -23,7 +23,7 @@
OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -43,12 +43,15 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
+ DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -61,13 +64,10 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc8\lib"
+ LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
- FixedBaseAddress="1"
/>
<Tool
Name="VCALinkTool"
@@ -92,8 +92,6 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
@@ -101,7 +99,7 @@
OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -122,10 +120,14 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
@@ -139,13 +141,10 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc8\lib"
+ LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="17"
- FixedBaseAddress="1"
/>
<Tool
Name="VCALinkTool"
@@ -170,8 +169,6 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
@@ -179,7 +176,8 @@
OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -198,11 +196,12 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
+ WarningLevel="3"
Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -215,14 +214,12 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
- FixedBaseAddress="1"
/>
<Tool
Name="VCALinkTool"
@@ -247,8 +244,6 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
@@ -256,7 +251,8 @@
OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -276,10 +272,12 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -292,14 +290,12 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
- FixedBaseAddress="1"
/>
<Tool
Name="VCALinkTool"
@@ -324,8 +320,6 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
/>
</Configuration>
</Configurations>
@@ -338,10 +332,22 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath="..\sub_string_finder.cpp"
+ RelativePath="..\gen_input.cpp"
>
</File>
</Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/examples/pipeline/square/vc8/square.sln b/examples/pipeline/square/vc8/square.sln
new file mode 100644
index 0000000..d9ce229
--- /dev/null
+++ b/examples/pipeline/square/vc8/square.sln
@@ -0,0 +1,38 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+ ProjectSection(ProjectDependencies) = postProject
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7} = {25A46A49-406F-4681-8AC9-5FE46F38E5A7}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.Build.0 = Debug|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.ActiveCfg = Debug|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.Build.0 = Debug|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.ActiveCfg = Release|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.Build.0 = Release|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.ActiveCfg = Release|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/text_filter/vc8/text_filter.vcproj b/examples/pipeline/square/vc8/square.vcproj
similarity index 87%
copy from examples/pipeline/text_filter/vc8/text_filter.vcproj
copy to examples/pipeline/square/vc8/square.vcproj
index daeb67c..4e49b7d 100644
--- a/examples/pipeline/text_filter/vc8/text_filter.vcproj
+++ b/examples/pipeline/square/vc8/square.vcproj
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="Windows-1252"?>
+<?xml version="1.0" encoding="windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
- Name="text_filter"
- ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
- RootNamespace="text_filter"
+ Name="square"
+ ProjectGUID="{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+ RootNamespace="square"
Keyword="Win32Proj"
>
<Platforms>
@@ -31,7 +31,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -47,7 +48,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -112,7 +113,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -129,7 +131,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -193,7 +195,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -273,7 +276,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -350,14 +354,22 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath="..\text_filter.cpp"
+ RelativePath="..\square.cpp"
>
</File>
</Filter>
- <File
- RelativePath="..\index.html"
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
- </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj b/examples/pipeline/square/vc9/gen_input.vcproj
similarity index 74%
copy from examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
copy to examples/pipeline/square/vc9/gen_input.vcproj
index 566265d..a9f3d1d 100644
--- a/examples/GettingStarted/sub_string_finder/vc9/sub_string_finder.vcproj
+++ b/examples/pipeline/square/vc9/gen_input.vcproj
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9.00"
- Name="sub_string_finder"
- ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2525}"
- RootNamespace="sub_string_finder"
+ Version="9,00"
+ Name="gen_input"
+ ProjectGUID="{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+ RootNamespace="gen_input"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
@@ -24,7 +24,7 @@
OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -44,11 +44,14 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
- DebugInformationFormat="3"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -61,13 +64,10 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc9\lib"
+ LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
RandomizedBaseAddress="1"
- FixedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
@@ -91,16 +91,14 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc9\bin\tbb_debug.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -116,13 +114,19 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -135,16 +139,12 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc9\lib"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
- FixedBaseAddress="1"
DataExecutionPrevention="0"
- TargetMachine="1"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -166,16 +166,15 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc9\bin\tbb.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -191,15 +190,13 @@
/>
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
UsePrecompiledHeader="0"
+ WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
@@ -213,13 +210,14 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc9\lib"
GenerateDebugInformation="true"
SubSystem="1"
- TargetMachine="17"
- FixedBaseAddress="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -240,12 +238,7 @@
Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc9\bin\tbb_debug.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
@@ -253,7 +246,8 @@
OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
- CharacterSet="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -273,10 +267,11 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -289,14 +284,14 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc9\lib"
+ GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
TargetMachine="17"
- FixedBaseAddress="1"
/>
<Tool
Name="VCALinkTool"
@@ -317,12 +312,7 @@
Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc9\bin\tbb.dll" "$(OutDir)""
/>
</Configuration>
</Configurations>
@@ -335,10 +325,22 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath="..\sub_string_finder.cpp"
+ RelativePath="..\gen_input.cpp"
>
</File>
</Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/examples/pipeline/square/vc9/square.sln b/examples/pipeline/square/vc9/square.sln
new file mode 100644
index 0000000..6e44ca3
--- /dev/null
+++ b/examples/pipeline/square/vc9/square.sln
@@ -0,0 +1,38 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "square", "square.vcproj", "{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+ ProjectSection(ProjectDependencies) = postProject
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7} = {25A46A49-406F-4681-8AC9-5FE46F38E5A7}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_input", "gen_input.vcproj", "{25A46A49-406F-4681-8AC9-5FE46F38E5A7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|Win32.Build.0 = Debug|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.ActiveCfg = Debug|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Debug|x64.Build.0 = Debug|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.ActiveCfg = Release|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|Win32.Build.0 = Release|Win32
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.ActiveCfg = Release|x64
+ {A21C0AEE-ADDC-45F0-A668-58FF10351D23}.Release|x64.Build.0 = Release|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|Win32.Build.0 = Debug|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.ActiveCfg = Debug|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Debug|x64.Build.0 = Debug|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.ActiveCfg = Release|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|Win32.Build.0 = Release|Win32
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.ActiveCfg = Release|x64
+ {25A46A49-406F-4681-8AC9-5FE46F38E5A7}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/text_filter/vc9/text_filter.vcproj b/examples/pipeline/square/vc9/square.vcproj
similarity index 85%
copy from examples/pipeline/text_filter/vc9/text_filter.vcproj
copy to examples/pipeline/square/vc9/square.vcproj
index d7c59b8..40a3064 100644
--- a/examples/pipeline/text_filter/vc9/text_filter.vcproj
+++ b/examples/pipeline/square/vc9/square.vcproj
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="Windows-1252"?>
+<?xml version="1.0" encoding="windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9.00"
- Name="text_filter"
- ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
- RootNamespace="text_filter"
+ Version="9,00"
+ Name="square"
+ ProjectGUID="{A21C0AEE-ADDC-45F0-A668-58FF10351D23}"
+ RootNamespace="square"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
@@ -32,7 +32,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -48,7 +49,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -99,9 +100,9 @@
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
@@ -111,7 +112,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -122,13 +124,16 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
+ Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="2"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="3"
UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -141,16 +146,15 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb.lib"
+ AdditionalDependencies="tbb_debug.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc9\lib"
+ AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc9\lib"
+ GenerateDebugInformation="true"
SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
FixedBaseAddress="1"
DataExecutionPrevention="0"
- TargetMachine="1"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -172,14 +176,14 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc9\bin\tbb.dll" "$(OutDir)""
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc9\bin\tbb_debug.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
@@ -189,7 +193,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -200,16 +205,13 @@
/>
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="3"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
UsePrecompiledHeader="0"
- DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -222,13 +224,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="tbb_debug.lib"
+ AdditionalDependencies="tbb.lib"
LinkIncremental="1"
- AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\em64t\vc9\lib"
- GenerateDebugInformation="true"
+ AdditionalLibraryDirectories="$(TBB21_INSTALL_DIR)\ia32\vc9\lib"
SubSystem="1"
- TargetMachine="17"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
FixedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -249,12 +254,9 @@
Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
- Description="Copying tbb_debug.dll"
- CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc9\bin\tbb_debug.dll" "$(OutDir)""
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB21_INSTALL_DIR)\ia32\vc9\bin\tbb.dll" "$(OutDir)""
/>
</Configuration>
<Configuration
@@ -270,7 +272,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Constructing input.txt"
- CommandLine="type ..\index.html >input.txt
for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+ CommandLine="$(OutDir)\gen_input >input.txt
"
+ AdditionalDependencies="gen_input.exe"
Outputs="input.txt"
/>
<Tool
@@ -307,8 +310,10 @@
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
- TargetMachine="17"
+ RandomizedBaseAddress="1"
FixedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -329,9 +334,6 @@
Name="VCAppVerifierTool"
/>
<Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
Name="VCPostBuildEventTool"
Description="Copying tbb.dll"
CommandLine="copy "$(TBB21_INSTALL_DIR)\em64t\vc9\bin\tbb.dll" "$(OutDir)""
@@ -347,14 +349,22 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath="..\text_filter.cpp"
+ RelativePath="..\square.cpp"
>
</File>
</Filter>
- <File
- RelativePath="..\index.html"
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
- </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..e6abea8
--- /dev/null
+++ b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj
@@ -0,0 +1,437 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 6DA3F3EC0DE5D3D80039CADE /* gen_input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */; };
+ A1F593A60B8F042A00073279 /* square.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* square.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 6DA3F3ED0DE5D4090039CADE /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 6DA3F3E10DE5D34A0039CADE;
+ remoteInfo = "gen-input";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = gen_input.cpp; path = ../gen_input.cpp; sourceTree = SOURCE_ROOT; };
+ 6DA3F3E20DE5D34A0039CADE /* gen-input */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gen-input"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8DD76F6C0486A84900D96B5E /* square */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = square; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* square.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = square.cpp; path = ../square.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 6DA3F3E00DE5D34A0039CADE /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* square */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = square;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */,
+ A1F593A50B8F042A00073279 /* square.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* square */,
+ 6DA3F3E20DE5D34A0039CADE /* gen-input */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 6DA3F3E10DE5D34A0039CADE /* gen-input */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6DA3F3E40DE5D36B0039CADE /* Build configuration list for PBXNativeTarget "gen-input" */;
+ buildPhases = (
+ 6DA3F3DF0DE5D34A0039CADE /* Sources */,
+ 6DA3F3E00DE5D34A0039CADE /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "gen-input";
+ productName = "gen-input";
+ productReference = 6DA3F3E20DE5D34A0039CADE /* gen-input */;
+ productType = "com.apple.product-type.tool";
+ };
+ 8DD76F620486A84900D96B5E /* square */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "square" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ 6D3576C90DE5C7A500C03B6D /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 6DA3F3EE0DE5D4090039CADE /* PBXTargetDependency */,
+ );
+ name = square;
+ productInstallPath = "$(HOME)/bin";
+ productName = square;
+ productReference = 8DD76F6C0486A84900D96B5E /* square */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */;
+ compatibilityVersion = "Xcode 2.4";
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* square */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* square */,
+ 6DA3F3E10DE5D34A0039CADE /* gen-input */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 6D3576C90DE5C7A500C03B6D /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ "$(TARGET_BUILD_DIR)/input.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "$TARGET_BUILD_DIR/gen-input >$TARGET_BUILD_DIR/input.txt";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 6DA3F3DF0DE5D34A0039CADE /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6DA3F3EC0DE5D3D80039CADE /* gen_input.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* square.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 6DA3F3EE0DE5D4090039CADE /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 6DA3F3E10DE5D34A0039CADE /* gen-input */;
+ targetProxy = 6DA3F3ED0DE5D4090039CADE /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = square;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = square;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ 6DA3F3E50DE5D36B0039CADE /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ PREBINDING = NO;
+ PRODUCT_NAME = "gen-input";
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 6DA3F3E60DE5D36B0039CADE /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = "$(HOME)/bin";
+ PREBINDING = NO;
+ PRODUCT_NAME = "gen-input";
+ ZERO_LINK = YES;
+ };
+ name = Debug64;
+ };
+ 6DA3F3E70DE5D36B0039CADE /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = "$(HOME)/bin";
+ PREBINDING = NO;
+ PRODUCT_NAME = "gen-input";
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 6DA3F3E80DE5D36B0039CADE /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = "$(HOME)/bin";
+ PREBINDING = NO;
+ PRODUCT_NAME = "gen-input";
+ ZERO_LINK = YES;
+ };
+ name = Release64;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = square;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = square;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "square" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6DA3F3E40DE5D36B0039CADE /* Build configuration list for PBXNativeTarget "gen-input" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6DA3F3E50DE5D36B0039CADE /* Debug */,
+ 6DA3F3E60DE5D36B0039CADE /* Debug64 */,
+ 6DA3F3E70DE5D36B0039CADE /* Release */,
+ 6DA3F3E80DE5D36B0039CADE /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/pipeline/text_filter/Makefile b/examples/pipeline/text_filter/Makefile
index 8c02bca..67ec0b0 100644
--- a/examples/pipeline/text_filter/Makefile
+++ b/examples/pipeline/text_filter/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=text_filter
+ARGS=input.txt output.txt
# The C++ compiler
#CXX=g++
@@ -36,7 +37,7 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d input.txt output.txt
@@ -45,4 +46,4 @@ test:
@echo Constructing input.txt
@cat index.html > input.txt
@-csh -c "repeat 500 cat index.html >> input.txt" 2>/dev/null
- ./$(PROG) input.txt output.txt
+ ./$(PROG) $(ARGS)
diff --git a/examples/pipeline/text_filter/Makefile.windows b/examples/pipeline/text_filter/Makefile.windows
index a9f8f07..1025132 100644
--- a/examples/pipeline/text_filter/Makefile.windows
+++ b/examples/pipeline/text_filter/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Text_Filter
+ARGS=input.txt output.txt
# The C++ compiler options
CXX = cl.exe
@@ -38,7 +39,7 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest
input.txt:
@@ -46,4 +47,4 @@ input.txt:
@cmd.exe /C "@type index.html >input.txt"
@-cmd.exe /C "for /L %%a in (1,1,500) do @type index.html >> input.txt"
test: input.txt
- $(PROG) input.txt output.txt
+ $(PROG) $(ARGS)
diff --git a/examples/pipeline/text_filter/index.html b/examples/pipeline/text_filter/index.html
index d967d2f..e6907f9 100644
--- a/examples/pipeline/text_filter/index.html
+++ b/examples/pipeline/text_filter/index.html
@@ -46,7 +46,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/pipeline/text_filter/text_filter.cpp b/examples/pipeline/text_filter/text_filter.cpp
index 197dd2d..fac8596 100644
--- a/examples/pipeline/text_filter/text_filter.cpp
+++ b/examples/pipeline/text_filter/text_filter.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -60,6 +60,9 @@ public:
size_t size() const {return my_end-begin();}
};
+static const char* InputFileName = "input.txt";
+static const char* OutputFileName = "output.txt";
+
class MyInputFilter: public tbb::filter {
public:
static const size_t n_buffer = 8;
@@ -73,7 +76,7 @@ private:
};
MyInputFilter::MyInputFilter( FILE* input_file_ ) :
- filter(/*is_serial=*/true),
+ filter(serial_in_order),
next_buffer(0),
input_file(input_file_),
last_char_of_previous_buffer(' ')
@@ -103,7 +106,7 @@ public:
};
MyTransformFilter::MyTransformFilter() :
- tbb::filter(/*ordered=*/false)
+ tbb::filter(parallel)
{}
/*override*/void* MyTransformFilter::operator()( void* item ) {
@@ -126,20 +129,22 @@ public:
};
MyOutputFilter::MyOutputFilter( FILE* output_file ) :
- tbb::filter(/*is_serial=*/true),
+ tbb::filter(serial_in_order),
my_output_file(output_file)
{
}
void* MyOutputFilter::operator()( void* item ) {
MyBuffer& b = *static_cast<MyBuffer*>(item);
- fwrite( b.begin(), 1, b.size(), my_output_file );
+ int n = fwrite( b.begin(), 1, b.size(), my_output_file );
+ if( n<=0 ) {
+ fprintf(stderr,"Can't write into %s file\n", OutputFileName);
+ exit(1);
+ }
return NULL;
}
static int NThread = tbb::task_scheduler_init::automatic;
-static const char* InputFileName = "input.txt";
-static const char* OutputFileName = "output.txt";
static bool is_number_of_threads_set = false;
void Usage()
@@ -210,7 +215,7 @@ int run_pipeline( int nthreads )
printf("threads = %d time = %g\n", nthreads, (t1-t0).seconds());
} else {
if ( nthreads == 1 ){
- printf("serial run time = %g\n", (t1-t0).seconds());
+ printf("single thread run time = %g\n", (t1-t0).seconds());
} else {
printf("parallel run time = %g\n", (t1-t0).seconds());
}
@@ -226,8 +231,8 @@ int main( int argc, char* argv[] ) {
tbb::task_scheduler_init init( NThread );
if(!run_pipeline (NThread))
return 1;
- } else { // Number of threads wasn't set explicitly. Run serial and parallel version
- { // serial run
+ } else { // Number of threads wasn't set explicitly. Run single-thread and fully subscribed parallel versions
+ { // single-threaded run
tbb::task_scheduler_init init_serial(1);
if(!run_pipeline (1))
return 1;
diff --git a/examples/pipeline/text_filter/vc7.1/text_filter.vcproj b/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
index 74ed993..ada3bf3 100644
--- a/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
+++ b/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/pipeline/text_filter/vc8/text_filter.vcproj b/examples/pipeline/text_filter/vc8/text_filter.vcproj
index daeb67c..b0c9cc8 100644
--- a/examples/pipeline/text_filter/vc8/text_filter.vcproj
+++ b/examples/pipeline/text_filter/vc8/text_filter.vcproj
@@ -47,7 +47,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -129,7 +129,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/pipeline/text_filter/vc9/text_filter.vcproj b/examples/pipeline/text_filter/vc9/text_filter.vcproj
index d7c59b8..c825668 100644
--- a/examples/pipeline/text_filter/vc9/text_filter.vcproj
+++ b/examples/pipeline/text_filter/vc9/text_filter.vcproj
@@ -48,7 +48,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -206,7 +206,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/task/index.html b/examples/task/index.html
index 40d9ff3..9de11f8 100644
--- a/examples/task/index.html
+++ b/examples/task/index.html
@@ -13,7 +13,7 @@ This directory has examples of how to use the raw task scheduler.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/task/tree_sum/Makefile b/examples/task/tree_sum/Makefile
index 03d2873..4424f4b 100644
--- a/examples/task/tree_sum/Makefile
+++ b/examples/task/tree_sum/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=tree_sum
+ARGS=
# The C++ compiler
#CXX=g++
@@ -36,11 +37,11 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc_debug -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbbmalloc_debug -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG)
- ./$(PROG) -stdmalloc
+ ./$(PROG) $(ARGS)
+ ./$(PROG) -stdmalloc $(ARGS)
diff --git a/examples/task/tree_sum/Makefile.windows b/examples/task/tree_sum/Makefile.windows
index 5b41230..4ecb59b 100644
--- a/examples/task/tree_sum/Makefile.windows
+++ b/examples/task/tree_sum/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Tree_sum
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -38,9 +39,9 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbbmalloc.lib tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbbmalloc_debug.lib tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbbmalloc_debug.lib tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG)
- $(PROG) -stdmalloc
+ $(PROG) $(ARGS)
+ $(PROG) -stdmalloc $(ARGS)
diff --git a/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
index 17c9a43..4445c28 100644
--- a/examples/task/tree_sum/OptimizedParallelSumTree.cpp
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/task/tree_sum/SerialSumTree.cpp
index 1a8897e..2f39bae 100644
--- a/examples/task/tree_sum/SerialSumTree.cpp
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/task/tree_sum/SimpleParallelSumTree.cpp b/examples/task/tree_sum/SimpleParallelSumTree.cpp
index d5ccd84..33e34b1 100644
--- a/examples/task/tree_sum/SimpleParallelSumTree.cpp
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/task/tree_sum/common.h b/examples/task/tree_sum/common.h
index efc8141..c51248f 100644
--- a/examples/task/tree_sum/common.h
+++ b/examples/task/tree_sum/common.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/task/tree_sum/index.html b/examples/task/tree_sum/index.html
index 96b2acb..259691e 100644
--- a/examples/task/tree_sum/index.html
+++ b/examples/task/tree_sum/index.html
@@ -67,7 +67,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/task/tree_sum/main.cpp b/examples/task/tree_sum/main.cpp
index b11cd7c..338b36a 100644
--- a/examples/task/tree_sum/main.cpp
+++ b/examples/task/tree_sum/main.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/examples/task/tree_sum/vc7.1/tree_sum.vcproj b/examples/task/tree_sum/vc7.1/tree_sum.vcproj
index 0a5aa4c..2b673f5 100644
--- a/examples/task/tree_sum/vc7.1/tree_sum.vcproj
+++ b/examples/task/tree_sum/vc7.1/tree_sum.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/task/tree_sum/vc8/tree_sum.vcproj b/examples/task/tree_sum/vc8/tree_sum.vcproj
index 691b3f5..bc4be2a 100644
--- a/examples/task/tree_sum/vc8/tree_sum.vcproj
+++ b/examples/task/tree_sum/vc8/tree_sum.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/task/tree_sum/vc9/tree_sum.vcproj b/examples/task/tree_sum/vc9/tree_sum.vcproj
index 6e7e348..fe789a7 100644
--- a/examples/task/tree_sum/vc9/tree_sum.vcproj
+++ b/examples/task/tree_sum/vc9/tree_sum.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
index 7f2abda..43e0ea7 100644
--- a/examples/test_all/fibonacci/Fibonacci.cpp
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -323,7 +323,8 @@ value ParallelQueueFib(int n)
task_list list;
list.push_back(*new(task::allocate_root()) QueueInsertTask( n, stream ));
list.push_back(*new(task::allocate_root()) QueueProcessTask( stream ));
- // last runs first - scheduler is as LIFO
+ // If there is only a single thread, the first task in the list runs to completion
+ // before the second task in the list starts.
task::spawn_root_and_wait(list);
assert(stream.Queue.size() == 1); // it is easy to lose some work
Matrix2x2 M; stream.Queue.pop( M ); // get last matrix
@@ -523,7 +524,7 @@ typedef value (*MeasureFunc)(int);
value Measure(const char *name, MeasureFunc func, int n)
{
value result;
- if(Verbose) printf(name);
+ if(Verbose) printf("%s",name);
t0 = tick_count::now();
for(int number = 2; number <= n; number++)
result = func(number);
diff --git a/examples/test_all/fibonacci/Makefile b/examples/test_all/fibonacci/Makefile
index 8cf4794..3abcc62 100644
--- a/examples/test_all/fibonacci/Makefile
+++ b/examples/test_all/fibonacci/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -26,6 +26,7 @@
# GNU Makefile that builds and runs example.
PROG=fibonacci
+ARGS=
# The C++ compiler
#CXX=g++
@@ -36,10 +37,10 @@ release: *.cpp
$(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb $(LIBS)
debug: *.cpp
- $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
+ $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS)
clean:
rm -f $(PROG) *.o *.d
test:
- ./$(PROG)
+ ./$(PROG) $(ARGS)
diff --git a/examples/test_all/fibonacci/Makefile.windows b/examples/test_all/fibonacci/Makefile.windows
index fc22e6c..c75face 100644
--- a/examples/test_all/fibonacci/Makefile.windows
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -28,6 +28,7 @@
# Just specify your program basename
PROG=Fibonacci
+ARGS=
# The C++ compiler options
CXX = cl.exe
@@ -38,8 +39,8 @@ all: release test
release:
$(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
debug:
- $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe
clean:
@cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
test:
- $(PROG)
+ $(PROG) $(ARGS)
diff --git a/examples/test_all/fibonacci/index.html b/examples/test_all/fibonacci/index.html
index 2199b23..12c3462 100644
--- a/examples/test_all/fibonacci/index.html
+++ b/examples/test_all/fibonacci/index.html
@@ -45,7 +45,7 @@ General build directions can be found <A HREF=../../index.html#build>here</A>.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj b/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
index fee6503..5e371b5 100644
--- a/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
+++ b/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
@@ -21,7 +21,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="TRUE"
diff --git a/examples/test_all/fibonacci/vc8/fibonacci.vcproj b/examples/test_all/fibonacci/vc8/fibonacci.vcproj
index 1c2b173..7ce0093 100644
--- a/examples/test_all/fibonacci/vc8/fibonacci.vcproj
+++ b/examples/test_all/fibonacci/vc8/fibonacci.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
Detect64BitPortabilityProblems="true"
@@ -123,7 +123,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/test_all/fibonacci/vc9/fibonacci.vcproj b/examples/test_all/fibonacci/vc9/fibonacci.vcproj
index 0a50e9a..886b3a8 100644
--- a/examples/test_all/fibonacci/vc9/fibonacci.vcproj
+++ b/examples/test_all/fibonacci/vc9/fibonacci.vcproj
@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
@@ -197,7 +197,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="$(TBB21_INSTALL_DIR)\include"
- PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_USE_DEBUG"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
DebugInformationFormat="3"
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
index dce3c18..ac1d3a5 100644
--- a/examples/test_all/index.html
+++ b/examples/test_all/index.html
@@ -13,7 +13,7 @@ This directory contains programs that exercise all the components of Threading B
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/include/index.html b/include/index.html
index 5c73f63..c37ff34 100644
--- a/include/index.html
+++ b/include/index.html
@@ -13,7 +13,7 @@ Include files for Threading Building Blocks.
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/include/tbb/_tbb_windef.h b/include/tbb/_tbb_windef.h
index bb02f3c..ceb697d 100644
--- a/include/tbb/_tbb_windef.h
+++ b/include/tbb/_tbb_windef.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -52,20 +52,20 @@ namespace std {
#define __TBB_STRING_AUX(x) #x
#define __TBB_STRING(x) __TBB_STRING_AUX(x)
-// Default setting of TBB_DO_ASSERT
-#ifdef TBB_DO_ASSERT
-# if TBB_DO_ASSERT
+// Default setting of TBB_USE_DEBUG
+#ifdef TBB_USE_DEBUG
+# if TBB_USE_DEBUG
# if !defined(_DEBUG)
-# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_DO_ASSERT!=0")
+# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_USE_DEBUG!=0")
# endif
# else
# if defined(_DEBUG)
-# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_DO_ASSERT==0")
+# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_USE_DEBUG==0")
# endif
# endif
#else
# ifdef _DEBUG
-# define TBB_DO_ASSERT 1
+# define TBB_USE_DEBUG 1
# endif
#endif
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
index 2f9d80d..f9a08df 100644
--- a/include/tbb/aligned_space.h
+++ b/include/tbb/aligned_space.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/atomic.h b/include/tbb/atomic.h
index 351cfce..3ff9050 100644
--- a/include/tbb/atomic.h
+++ b/include/tbb/atomic.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -40,11 +40,11 @@
#include "tbb_machine.h"
-#if defined(_MSC_VER) && defined(_Wp64)
- // Workaround for overzealous compiler warnings in /Wp64 mode
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+ // Workaround for overzealous compiler warnings
#pragma warning (push)
#pragma warning (disable: 4244 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
namespace tbb {
@@ -170,7 +170,11 @@ __TBB_DECL_ATOMIC_PRIMITIVES(8)
The baroque expression below avoids all the warnings (we hope). */
#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))
-template<typename I, typename D, size_t Step>
+//! Base class that provides basic functionality for atomic<T>.
+/** I is the underlying type.
+ D is the difference type.
+ StepType should be char if I is an integral type, and T if I is a T*. */
+template<typename I, typename D, typename StepType>
struct atomic_impl: private atomic_base<I> {
private:
typedef typename atomic_word<sizeof(I)>::word word;
@@ -179,7 +183,7 @@ public:
template<memory_semantics M>
value_type fetch_and_add( D addend ) {
- return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_value, addend*Step ));
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_value, addend*sizeof(StepType) ));
}
value_type fetch_and_add( D addend ) {
@@ -226,10 +230,6 @@ public:
return __TBB_load_with_acquire( this->my_value );
}
- value_type& _internal_reference() const {
- return static_cast<value_type&>(this->my_value);
- }
-
protected:
value_type store_with_release( value_type rhs ) {
__TBB_store_with_release(this->my_value,rhs);
@@ -269,23 +269,23 @@ public:
#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
template<>
-inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::operator atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type() const volatile {
+inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::operator atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::value_type() const volatile {
return __TBB_Load8(&this->my_value);
}
template<>
-inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::operator atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type() const volatile {
+inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::operator atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::value_type() const volatile {
return __TBB_Load8(&this->my_value);
}
template<>
-inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::value_type atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,char>::store_with_release( value_type rhs ) {
__TBB_Store8(&this->my_value,rhs);
return rhs;
}
template<>
-inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::value_type atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,char>::store_with_release( value_type rhs ) {
__TBB_Store8(&this->my_value,rhs);
return rhs;
}
@@ -304,7 +304,7 @@ struct atomic {
};
#define __TBB_DECL_ATOMIC(T) \
- template<> struct atomic<T>: internal::atomic_impl<T,T,1> { \
+ template<> struct atomic<T>: internal::atomic_impl<T,T,char> { \
T operator=( T rhs ) {return store_with_release(rhs);} \
atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;} \
};
@@ -315,10 +315,28 @@ __TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)
#else
// Some old versions of MVSC cannot correctly compile templates with "long long".
#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+
__TBB_DECL_ATOMIC(long)
__TBB_DECL_ATOMIC(unsigned long)
-__TBB_DECL_ATOMIC(unsigned int)
+
+#if defined(_MSC_VER) && __TBB_WORDSIZE==4
+/* Special version of __TBB_DECL_ATOMIC that avoids gratuitous warnings from cl /Wp64 option.
+ It is identical to __TBB_DECL_ATOMIC(unsigned) except that it replaces operator=(T)
+ with an operator=(U) that explicitly converts the U to a T. Types T and U should be
+ type synonyms on the platform. Type U should be the wider variant of T from the
+ perspective of /Wp64. */
+#define __TBB_DECL_ATOMIC_ALT(T,U) \
+ template<> struct atomic<T>: internal::atomic_impl<T,T,char> { \
+ T operator=( U rhs ) {return store_with_release(T(rhs));} \
+ atomic<T>& operator=( const atomic<T>& rhs ) {store_with_release(rhs); return *this;} \
+ };
+__TBB_DECL_ATOMIC_ALT(unsigned,size_t)
+__TBB_DECL_ATOMIC_ALT(int,ptrdiff_t)
+#else
+__TBB_DECL_ATOMIC(unsigned)
__TBB_DECL_ATOMIC(int)
+#endif /* defined(_MSC_VER) && __TBB_WORDSIZE==4 */
+
__TBB_DECL_ATOMIC(unsigned short)
__TBB_DECL_ATOMIC(short)
__TBB_DECL_ATOMIC(char)
@@ -329,12 +347,12 @@ __TBB_DECL_ATOMIC(unsigned char)
__TBB_DECL_ATOMIC(wchar_t)
#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */
-template<typename T> struct atomic<T*>: internal::atomic_impl<T*,ptrdiff_t,sizeof(T)> {
+template<typename T> struct atomic<T*>: internal::atomic_impl<T*,ptrdiff_t,T> {
T* operator=( T* rhs ) {
// "this" required here in strict ISO C++ because store_with_release is a dependent name
return this->store_with_release(rhs);
}
- atomic<T*>& operator=( const atomic<T*> rhs ) {this->store_with_release(rhs); return *this;}
+ atomic<T*>& operator=( const atomic<T*>& rhs ) {this->store_with_release(rhs); return *this;}
T* operator->() const {
return (*this);
}
@@ -423,9 +441,8 @@ public:
} // namespace tbb
-#if defined(_MSC_VER) && defined(_Wp64)
- // Workaround for overzealous compiler warnings in /Wp64 mode
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
#pragma warning (pop)
-#endif /* _MSC_VER && _Wp64 */
+#endif // warnings 4244, 4267 are back
#endif /* __TBB_atomic_H */
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
index 6094ef0..fd20aa0 100644
--- a/include/tbb/blocked_range.h
+++ b/include/tbb/blocked_range.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/blocked_range2d.h b/include/tbb/blocked_range2d.h
index 612fb01..d0e48b9 100644
--- a/include/tbb/blocked_range2d.h
+++ b/include/tbb/blocked_range2d.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/blocked_range3d.h b/include/tbb/blocked_range3d.h
index 42775f6..6b6742f 100644
--- a/include/tbb/blocked_range3d.h
+++ b/include/tbb/blocked_range3d.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/cache_aligned_allocator.h b/include/tbb/cache_aligned_allocator.h
index 93a01c7..cf91281 100644
--- a/include/tbb/cache_aligned_allocator.h
+++ b/include/tbb/cache_aligned_allocator.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -44,19 +44,25 @@ namespace internal {
//! Cache/sector line size.
/** @ingroup memory_allocation */
- size_t NFS_GetLineSize();
+ size_t __TBB_EXPORTED_FUNC NFS_GetLineSize();
//! Allocate memory on cache/sector line boundary.
/** @ingroup memory_allocation */
- void* NFS_Allocate( size_t n_element, size_t element_size, void* hint );
+ void* __TBB_EXPORTED_FUNC NFS_Allocate( size_t n_element, size_t element_size, void* hint );
//! Free memory allocated by NFS_Allocate.
/** Freeing a NULL pointer is allowed, but has no effect.
@ingroup memory_allocation */
- void NFS_Free( void* );
+ void __TBB_EXPORTED_FUNC NFS_Free( void* );
}
//! @endcond
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+ #pragma warning (push)
+ #pragma warning (disable: 4100)
+#endif
+
//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
/** The members are ordered the same way they are in section 20.4.1
of the ISO C++ standard.
@@ -75,15 +81,6 @@ public:
typedef cache_aligned_allocator<U> other;
};
-#if _WIN64
- //! Non-ISO method required by Microsoft's STL containers
- /** Some versions of Microsoft's container classes seem to require that
- allocators supply this method. */
- char* _Charalloc( size_type size ) {
- return (char*)internal::NFS_Allocate( size, sizeof(T), 0 );
- }
-#endif /* _WIN64 */
-
cache_aligned_allocator() throw() {}
cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}
template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}
@@ -114,6 +111,10 @@ public:
void destroy( pointer p ) {p->~T();}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif // warning 4100 is back
+
//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
/** @ingroup memory_allocation */
template<>
@@ -133,6 +134,6 @@ inline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_a
template<typename T, typename U>
inline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}
-} // namespace ThreadBuildingBlocks
+} // namespace tbb
#endif /* __TBB_cache_aligned_allocator_H */
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
index d4ca9b5..64945d0 100644
--- a/include/tbb/concurrent_hash_map.h
+++ b/include/tbb/concurrent_hash_map.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,24 +31,28 @@
#include <stdexcept>
#include <iterator>
-#include <utility> // Need std::pair from here
+#include <utility> // Need std::pair
+#include <cstring> // Need std::memset
+#include <string>
#include "tbb_stddef.h"
#include "cache_aligned_allocator.h"
#include "tbb_allocator.h"
#include "spin_rw_mutex.h"
#include "atomic.h"
-#include "aligned_space.h"
-#if TBB_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS
#include <typeinfo>
#endif
namespace tbb {
-template<typename Key, typename T, typename HashCompare, typename A = tbb_allocator<std::pair<Key, T> > >
+template<typename T> struct tbb_hash_compare;
+template<typename Key, typename T, typename HashCompare = tbb_hash_compare<Key>, typename A = tbb_allocator<std::pair<Key, T> > >
class concurrent_hash_map;
//! @cond INTERNAL
namespace internal {
+ //! Type of a hash code.
+ typedef size_t hashcode_t;
//! base class of concurrent_hash_map
class hash_map_base {
public:
@@ -58,7 +62,7 @@ namespace internal {
typedef spin_rw_mutex segment_mutex_t;
//! Type of a hash code.
- typedef size_t hashcode_t;
+ typedef internal::hashcode_t hashcode_t;
//! Log2 of n_segment
static const size_t n_segment_bits = 6;
//! Number of segments
@@ -83,7 +87,7 @@ namespace internal {
//! True if my_logical_size>=my_physical_size.
/** Used to support Intel(R) Thread Checker. */
- bool internal_grow_predicate() const;
+ bool __TBB_EXPORTED_METHOD internal_grow_predicate() const;
};
//! Meets requirements of a forward iterator for STL */
@@ -91,13 +95,11 @@ namespace internal {
@ingroup containers */
template<typename Container, typename Value>
class hash_map_iterator
-#if defined(_WIN64) && defined(_MSC_VER)
- // Ensure that Microsoft's internal template function _Val_type works correctly.
: public std::iterator<std::forward_iterator_tag,Value>
-#endif /* defined(_WIN64) && defined(_MSC_VER) */
{
typedef typename Container::node node;
typedef typename Container::chain chain;
+ typedef typename Container::segment segment;
//! concurrent_hash_map over which we are iterating.
Container* my_table;
@@ -129,8 +131,9 @@ namespace internal {
void advance_to_next_node() {
size_t i = my_array_index+1;
do {
- while( i<my_table->my_segment[my_segment_index].my_physical_size ) {
- my_node = my_table->my_segment[my_segment_index].my_array[i].node_list;
+ segment &s = my_table->my_segment[my_segment_index];
+ while( i<s.my_physical_size ) {
+ my_node = s.my_array[i].node_list;
if( my_node ) goto done;
++i;
}
@@ -168,15 +171,6 @@ namespace internal {
operator++();
return result;
}
-
- // STL support
-
- typedef ptrdiff_t difference_type;
- typedef Value value_type;
- typedef Value* pointer;
- typedef Value& reference;
- typedef const Value& const_reference;
- typedef std::forward_iterator_tag iterator_category;
};
template<typename Container, typename Value>
@@ -188,8 +182,10 @@ namespace internal {
{
if( segment_index<my_table->n_segment ) {
if( !my_node ) {
- chain* first_chain = my_table->my_segment[segment_index].my_array;
- if( first_chain ) my_node = first_chain[my_array_index].node_list;
+ segment &s = my_table->my_segment[segment_index];
+ chain* first_chain = s.my_array;
+ if( first_chain && my_array_index < s.my_physical_size)
+ my_node = first_chain[my_array_index].node_list;
}
if( !my_node ) advance_to_next_node();
}
@@ -229,7 +225,6 @@ namespace internal {
typedef std::size_t size_type;
typedef typename Iterator::value_type value_type;
typedef typename Iterator::reference reference;
- typedef typename Iterator::const_reference const_reference;
typedef typename Iterator::difference_type difference_type;
typedef Iterator iterator;
@@ -246,6 +241,8 @@ namespace internal {
my_grainsize(r.my_grainsize)
{
r.my_end = my_begin = r.my_midpoint;
+ __TBB_ASSERT( my_begin!=my_end, "Splitting despite the range is not divisible" );
+ __TBB_ASSERT( r.my_begin!=r.my_end, "Splitting despite the range is not divisible" );
set_midpoint();
r.set_midpoint();
}
@@ -274,24 +271,64 @@ namespace internal {
template<typename Iterator>
void hash_map_range<Iterator>::set_midpoint() const {
- size_t n = my_end.my_segment_index-my_begin.my_segment_index;
- if( n>1 || (n==1 && my_end.my_array_index>0) ) {
+ size_t n = my_end.my_segment_index - my_begin.my_segment_index;
+ if( n > 1 || (n == 1 && my_end.my_array_index > my_grainsize/2) ) {
// Split by groups of segments
- my_midpoint = Iterator(*my_begin.my_table,(my_end.my_segment_index+my_begin.my_segment_index)/2u);
+ my_midpoint = Iterator(*my_begin.my_table,(my_end.my_segment_index+my_begin.my_segment_index+1)/2u);
} else {
// Split by groups of nodes
size_t m = my_end.my_array_index-my_begin.my_array_index;
- if( m>my_grainsize ) {
- my_midpoint = Iterator(*my_begin.my_table,my_begin.my_segment_index,m/2u);
+ if( n ) m += my_begin.my_table->my_segment[my_begin.my_segment_index].my_physical_size;
+ if( m > my_grainsize ) {
+ my_midpoint = Iterator(*my_begin.my_table,my_begin.my_segment_index,my_begin.my_array_index + m/2u);
} else {
my_midpoint = my_end;
}
}
- __TBB_ASSERT( my_midpoint.my_segment_index<=my_begin.my_table->n_segment, NULL );
- }
+ __TBB_ASSERT( my_begin.my_segment_index < my_midpoint.my_segment_index
+ || (my_begin.my_segment_index == my_midpoint.my_segment_index
+ && my_begin.my_array_index <= my_midpoint.my_array_index),
+ "my_begin is after my_midpoint" );
+ __TBB_ASSERT( my_midpoint.my_segment_index < my_end.my_segment_index
+ || (my_midpoint.my_segment_index == my_end.my_segment_index
+ && my_midpoint.my_array_index <= my_end.my_array_index),
+ "my_midpoint is after my_end" );
+ __TBB_ASSERT( my_begin != my_midpoint || my_begin == my_end,
+ "[my_begin, my_midpoint) range should not be empty" );
+ }
+ //! Hash multiplier
+ static const hashcode_t hash_multiplier = sizeof(hashcode_t)==4? 2654435769U : 11400714819323198485ULL;
+ //! Hasher functions
+ template<typename T>
+ inline static hashcode_t hasher( const T& t ) {
+ return static_cast<hashcode_t>( t ) * hash_multiplier;
+ }
+ template<typename P>
+ inline static hashcode_t hasher( P* ptr ) {
+ hashcode_t const h = reinterpret_cast<hashcode_t>( ptr );
+ return (h >> 3) ^ h;
+ }
+ template<typename E, typename S, typename A>
+ inline static hashcode_t hasher( const std::basic_string<E,S,A>& s ) {
+ hashcode_t h = 0;
+ for( const E* c = s.c_str(); *c; c++ )
+ h = static_cast<hashcode_t>(*c) ^ (h * hash_multiplier);
+ return h;
+ }
+ template<typename F, typename S>
+ inline static hashcode_t hasher( const std::pair<F,S>& p ) {
+ return hasher(p.first) ^ hasher(p.second);
+ }
} // namespace internal
//! @endcond
+//! hash_compare - default argument
+template<typename T>
+struct tbb_hash_compare {
+ static internal::hashcode_t hash( const T& t ) { return internal::hasher(t); }
+ static bool equal( const T& a, const T& b ) { return a == b; }
+};
+
//! Unordered map from Key to T.
/** concurrent_hash_map is associative container with concurrent access.
@@ -352,7 +389,7 @@ public:
//! Combines data access, locking, and garbage collection.
class const_accessor {
- friend class concurrent_hash_map;
+ friend class concurrent_hash_map<Key,T,HashCompare,A>;
friend class accessor;
void operator=( const accessor& ) const; // Deny access
const_accessor( const accessor& ); // Deny access
@@ -567,7 +604,7 @@ public:
private:
//! Basic unit of storage used in chain.
- struct node {
+ struct node: internal::no_copy {
//! Next node in chain
node* next;
node_mutex_t mutex;
@@ -575,7 +612,7 @@ private:
node( const Key& key ) : item(key, T()) {}
node( const Key& key, const T& t ) : item(key, t) {}
// exception-safe allocation, see C++ Standard 2003, clause 5.3.4p17
- void* operator new( size_t size, node_allocator_type& a ) {
+ void* operator new( size_t /*size*/, node_allocator_type& a ) {
void *ptr = a.allocate(1);
if(!ptr) throw std::bad_alloc();
return ptr;
@@ -605,11 +642,11 @@ private:
/** The table is partioned into disjoint segments to reduce conflicts.
A segment should be zero-initialized before use. */
struct segment: internal::hash_map_segment_base {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
~segment() {
__TBB_ASSERT( !my_array, "should have been cleared earlier" );
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
// Pointer to array of chains
chain* my_array;
@@ -629,7 +666,7 @@ private:
chain* array = cache_aligned_allocator<chain>().allocate( n );
// storing earlier might help overcome false positives of in deducing "bool grow" in concurrent threads
__TBB_store_with_release(my_physical_size, n);
- memset( array, 0, n*sizeof(chain) );
+ std::memset( array, 0, n*sizeof(chain) );
my_array = array;
}
};
@@ -678,7 +715,7 @@ private:
//! Perform initialization on behalf of a constructor
void initialize() {
my_segment = cache_aligned_allocator<segment>().allocate(n_segment);
- memset( my_segment, 0, sizeof(segment)*n_segment );
+ std::memset( my_segment, 0, sizeof(segment)*n_segment );
}
//! Copy "source" to *this, where *this must start out empty.
@@ -710,22 +747,28 @@ bool concurrent_hash_map<Key,T,HashCompare,A>::empty() const {
return true;
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress "conditional expression is constant" warning.
+ #pragma warning( push )
+ #pragma warning( disable: 4127 )
+#endif
+
template<typename Key, typename T, typename HashCompare, typename A>
template<bool op_insert>
bool concurrent_hash_map<Key,T,HashCompare,A>::lookup( const_accessor* result, const Key& key, bool write, const T* t ) {
- if( result /*&& result->my_node -- checked in release() */ )
+ if( result )
result->release();
const hashcode_t h = my_hash_compare.hash( key );
segment& s = get_segment(h);
restart:
bool return_value = false;
// first check in double-check sequence
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
- const bool grow = op_insert && s.internal_grow_predicate();
+#if TBB_USE_THREADING_TOOLS
+ bool grow = op_insert && s.internal_grow_predicate();
#else
- const bool grow = op_insert && s.my_logical_size >= s.my_physical_size
+ bool grow = op_insert && s.my_logical_size >= s.my_physical_size
&& s.my_physical_size < max_physical_size; // check whether there are free bits
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS */
segment_mutex_t::scoped_lock segment_lock( s.my_mutex, /*write=*/grow );
if( grow ) { // Load factor is too high
grow_segment( segment_lock, s );
@@ -780,6 +823,10 @@ done:
return return_value;
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif // warning 4127 is back
+
template<typename Key, typename T, typename HashCompare, typename A>
template<typename I>
std::pair<I, I> concurrent_hash_map<Key,T,HashCompare,A>::internal_equal_range( const Key& key, I end ) const {
@@ -801,7 +848,7 @@ template<typename Key, typename T, typename HashCompare, typename A>
bool concurrent_hash_map<Key,T,HashCompare,A>::erase( const Key &key ) {
hashcode_t h = my_hash_compare.hash( key );
segment& s = get_segment( h );
- node* b;
+ node* b=NULL; // explicitly initialized to prevent compiler warnings
{
bool chain_locked_for_write = false;
segment_mutex_t::scoped_lock segment_lock( s.my_mutex, /*write=*/false );
@@ -872,7 +919,7 @@ void concurrent_hash_map<Key,T,HashCompare,A>::swap(concurrent_hash_map<Key,T,Ha
template<typename Key, typename T, typename HashCompare, typename A>
void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
-#if TBB_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS
size_t total_physical_size = 0, min_physical_size = size_t(-1L), max_physical_size = 0; //< usage statistics
static bool reported = false;
#endif
@@ -891,7 +938,7 @@ void concurrent_hash_map<Key,T,HashCompare,A>::clear() {
}
cache_aligned_allocator<chain>().deallocate( array, n );
}
-#if TBB_PERFORMANCE_WARNINGS
+#if TBB_USE_PERFORMANCE_WARNINGS
total_physical_size += n;
if(min_physical_size > n) min_physical_size = n;
if(max_physical_size < n) max_physical_size = n;
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
index 7427e44..00bf3ac 100644
--- a/include/tbb/concurrent_queue.h
+++ b/include/tbb/concurrent_queue.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,7 +31,7 @@
#include "tbb_stddef.h"
#include "cache_aligned_allocator.h"
-#include "tbb_allocator.h"
+#include <iterator>
#include <new>
namespace tbb {
@@ -79,27 +79,27 @@ private:
virtual void copy_item( page& dst, size_t index, const void* src ) = 0;
virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;
protected:
- concurrent_queue_base_v3( size_t item_size );
- virtual ~concurrent_queue_base_v3();
+ __TBB_EXPORTED_METHOD concurrent_queue_base_v3( size_t item_size );
+ virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base_v3();
//! Enqueue item at tail of queue
- void internal_push( const void* src );
+ void __TBB_EXPORTED_METHOD internal_push( const void* src );
//! Dequeue item from head of queue
- void internal_pop( void* dst );
+ void __TBB_EXPORTED_METHOD internal_pop( void* dst );
//! Attempt to enqueue item onto queue.
- bool internal_push_if_not_full( const void* src );
+ bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );
//! Attempt to dequeue item from queue.
/** NULL if there was no item to dequeue. */
- bool internal_pop_if_present( void* dst );
+ bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );
//! Get size of queue
- ptrdiff_t internal_size() const;
+ ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;
//! set the queue capacity
- void internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+ void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
//! custom allocator
virtual page *allocate_page() = 0;
@@ -108,10 +108,17 @@ protected:
virtual void deallocate_page( page *p ) = 0;
//! free any remaining pages
- void internal_finish_clear() ;
+ /* note that the name may be misleading, but it remains so due to a historical accident. */
+ void __TBB_EXPORTED_METHOD internal_finish_clear() ;
//! throw an exception
- void internal_throw_exception() const;
+ void __TBB_EXPORTED_METHOD internal_throw_exception() const;
+
+ //! copy internal representation
+ void __TBB_EXPORTED_METHOD assign( const concurrent_queue_base_v3& src ) ;
+
+private:
+ virtual void copy_item( page& dst, size_t dindex, const page& src, size_t sindex ) = 0;
};
typedef concurrent_queue_base_v3 concurrent_queue_base ;
@@ -141,16 +148,16 @@ protected:
}
//! Construct iterator pointing to head of queue.
- concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue );
+ __TBB_EXPORTED_METHOD concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue );
//! Assignment
- void assign( const concurrent_queue_iterator_base_v3& i );
+ void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base_v3& i );
//! Advance iterator one step towards tail of queue.
- void advance();
+ void __TBB_EXPORTED_METHOD advance();
//! Destructor
- ~concurrent_queue_iterator_base_v3();
+ __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base_v3();
};
typedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
@@ -159,7 +166,8 @@ typedef concurrent_queue_iterator_base_v3 concurrent_queue_iterator_base;
/** Value is either the T or const T type of the container.
@ingroup containers */
template<typename Container, typename Value>
-class concurrent_queue_iterator: public concurrent_queue_iterator_base_v3 {
+class concurrent_queue_iterator: public concurrent_queue_iterator_base,
+ public std::iterator<std::forward_iterator_tag,Value> {
#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
template<typename T, class A>
friend class ::tbb::concurrent_queue;
@@ -235,7 +243,7 @@ class concurrent_queue: public internal::concurrent_queue_base_v3 {
page_allocator_type my_allocator;
//! Class used to ensure exception-safety of method "pop"
- class destroyer {
+ class destroyer: internal::no_copy {
T& my_value;
public:
destroyer( T& value ) : my_value(value) {}
@@ -251,6 +259,10 @@ class concurrent_queue: public internal::concurrent_queue_base_v3 {
new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
}
+ /*override*/ virtual void copy_item( page& dst, size_t dindex, const page& src, size_t sindex ) {
+ new( &get_ref(dst,dindex) ) T( static_cast<const T*>(static_cast<const void*>(&src+1))[sindex] );
+ }
+
/*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
T& from = get_ref(src,index);
destroyer d(from);
@@ -263,7 +275,7 @@ class concurrent_queue: public internal::concurrent_queue_base_v3 {
if( !p ) internal_throw_exception();
return p;
}
-
+
/*override*/ virtual void deallocate_page( page *p ) {
size_t n = sizeof(page) + items_per_page*item_size;
my_allocator.deallocate( reinterpret_cast<char*>(p), n );
@@ -291,9 +303,8 @@ public:
typedef std::ptrdiff_t difference_type;
//! Construct empty queue
- concurrent_queue(const allocator_type &a = allocator_type()) :
- concurrent_queue_base_v3( sizeof(T) )
- , my_allocator( a )
+ explicit concurrent_queue(const allocator_type &a = allocator_type()) :
+ concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
{
}
@@ -349,7 +360,7 @@ public:
//! return allocator object
allocator_type get_allocator() const { return this->my_allocator; }
- //! clear the queue and release all resources (i.e., pages)
+ //! clear the queue. not thread-safe.
void clear() ;
typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
@@ -363,11 +374,27 @@ public:
const_iterator begin() const {return const_iterator(*this);}
const_iterator end() const {return const_iterator();}
+ //! Copy constructor
+ concurrent_queue( const concurrent_queue& src, const allocator_type &a = allocator_type()) :
+ concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+ {
+ assign( src );
+ }
+
+ //! [begin,end) constructor
+ template<typename InputIterator>
+ concurrent_queue( InputIterator begin, InputIterator end, const allocator_type &a = allocator_type()) :
+ concurrent_queue_base_v3( sizeof(T) ), my_allocator( a )
+ {
+ for( ; begin != end; ++begin )
+ internal_push_if_not_full(&*begin);
+ }
};
template<typename T, class A>
concurrent_queue<T,A>::~concurrent_queue() {
clear();
+ internal_finish_clear();
}
template<typename T, class A>
@@ -376,7 +403,6 @@ void concurrent_queue<T,A>::clear() {
T value;
internal_pop_if_present(&value);
}
- internal_finish_clear();
}
} // namespace tbb
diff --git a/include/tbb/concurrent_vector.h b/include/tbb/concurrent_vector.h
index 9d67d1e..3c433c8 100644
--- a/include/tbb/concurrent_vector.h
+++ b/include/tbb/concurrent_vector.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -42,11 +42,11 @@
#include "tbb_machine.h"
-#if defined(_MSC_VER) && defined(_Wp64)
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (push)
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
namespace tbb {
@@ -59,6 +59,9 @@ class concurrent_vector;
//! @cond INTERNAL
namespace internal {
+ //! Routine that loads pointer from location pointed to by src without any fence, without causing ITT to report a race.
+ void* __TBB_EXPORTED_FUNC itt_load_pointer_v3( const void* src );
+
//! Base class of concurrent vector implementation.
/** @ingroup containers */
class concurrent_vector_base_v3 {
@@ -80,11 +83,11 @@ namespace internal {
// Segment pointer. Can be zero-initialized
struct segment_t {
void* array;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
~segment_t() {
__TBB_ASSERT( array <= __TBB_BAD_ALLOC, "should have been freed by clear" );
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
};
// Data fields
@@ -113,7 +116,7 @@ namespace internal {
my_storage[i].array = NULL;
my_segment = my_storage;
}
- ~concurrent_vector_base_v3();
+ __TBB_EXPORTED_METHOD ~concurrent_vector_base_v3();
static segment_index_t segment_index_of( size_type index ) {
return segment_index_t( __TBB_Log2( index|1 ) );
@@ -134,10 +137,10 @@ namespace internal {
}
//! An operation on an n-element array starting at begin.
- typedef void(*internal_array_op1)(void* begin, size_type n );
+ typedef void (__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );
//! An operation on n-element destination array and n-element source array.
- typedef void(*internal_array_op2)(void* dst, const void* src, size_type n );
+ typedef void (__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );
//! Internal structure for compact()
struct internal_segments_table {
@@ -145,19 +148,19 @@ namespace internal {
void* table[pointers_per_long_table];
};
- void internal_reserve( size_type n, size_type element_size, size_type max_size );
- size_type internal_capacity() const;
- void internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );
+ void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
+ size_type __TBB_EXPORTED_METHOD internal_capacity() const;
+ void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op2 init, const void *src );
void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op2 init, const void *src );
- size_type internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );
- void* internal_push_back( size_type element_size, size_type& index );
- segment_index_t internal_clear( internal_array_op1 destroy );
- void* internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );
- void internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );
- void internal_assign( const concurrent_vector_base_v3& src, size_type element_size,
+ size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op2 init, const void *src );
+ void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+ segment_index_t __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy );
+ void* __TBB_EXPORTED_METHOD internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy );
+ void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base_v3& src, size_type element_size, internal_array_op2 copy );
+ void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base_v3& src, size_type element_size,
internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
- void internal_throw_exception(size_type) const;
- void internal_swap(concurrent_vector_base_v3& v);
+ void __TBB_EXPORTED_METHOD internal_throw_exception(size_type) const;
+ void __TBB_EXPORTED_METHOD internal_swap(concurrent_vector_base_v3& v);
private:
//! Private functionality
@@ -167,16 +170,11 @@ private:
typedef concurrent_vector_base_v3 concurrent_vector_base;
- //TODO[?]: deal with _Range_checked_iterator_tag of MSVC
//! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/
/** Value is either the T or const T type of the container.
@ingroup containers */
template<typename Container, typename Value>
class vector_iterator
-#if defined(_WIN64) && defined(_MSC_VER)
- // Ensure that Microsoft's internal template function _Val_type works correctly.
- : public std::iterator<std::random_access_iterator_tag,Value>
-#endif /* defined(_WIN64) && defined(_MSC_VER) */
{
//! concurrent_vector over which we are iterating.
Container* my_vector;
@@ -229,7 +227,7 @@ public: // workaround for MSVC
vector_iterator operator+( ptrdiff_t offset ) const {
return vector_iterator( *my_vector, my_index+offset );
}
- vector_iterator operator+=( ptrdiff_t offset ) {
+ vector_iterator &operator+=( ptrdiff_t offset ) {
my_index+=offset;
my_item = NULL;
return *this;
@@ -237,7 +235,7 @@ public: // workaround for MSVC
vector_iterator operator-( ptrdiff_t offset ) const {
return vector_iterator( *my_vector, my_index-offset );
}
- vector_iterator operator-=( ptrdiff_t offset ) {
+ vector_iterator &operator-=( ptrdiff_t offset ) {
my_index-=offset;
my_item = NULL;
return *this;
@@ -316,7 +314,7 @@ public: // workaround for MSVC
template<typename Container, typename T, typename U>
bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
- return i.my_index==j.my_index;
+ return i.my_index==j.my_index && i.my_vector == j.my_vector;
}
template<typename Container, typename T, typename U>
@@ -415,7 +413,6 @@ public: // workaround for MSVC
- Added compact() method to defragment first segments
- Added swap() method
- range() defaults on grainsize = 1 supporting auto grainsize algorithms.
- - clear() behavior changed to freeing segments memory
@ingroup containers */
template<typename T, class A>
@@ -688,16 +685,16 @@ public:
}
}
- //! Clear container. Not thread safe
+ //! Clear container while keeping memory allocated.
+ /** To free up the memory, use in conjunction with method compact(). Not thread safe **/
void clear() {
- segment_t *table = my_segment;
- internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
- my_first_block = 0; // here is not default_initial_segments
+ internal_clear(&destroy_array);
}
//! Clear and destroy vector.
~concurrent_vector() {
- clear();
+ segment_t *table = my_segment;
+ internal_free_segments( reinterpret_cast<void**>(table), internal_clear(&destroy_array), my_first_block );
// base class destructor call should be then
}
@@ -737,22 +734,22 @@ private:
void internal_assign_iterators(I first, I last);
//! Construct n instances of T, starting at "begin".
- static void initialize_array( void* begin, const void*, size_type n );
+ static void __TBB_EXPORTED_FUNC initialize_array( void* begin, const void*, size_type n );
//! Construct n instances of T, starting at "begin".
- static void initialize_array_by( void* begin, const void* src, size_type n );
+ static void __TBB_EXPORTED_FUNC initialize_array_by( void* begin, const void* src, size_type n );
//! Construct n instances of T, starting at "begin".
- static void copy_array( void* dst, const void* src, size_type n );
+ static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );
//! Assign n instances of T, starting at "begin".
- static void assign_array( void* dst, const void* src, size_type n );
+ static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );
//! Destroy n instances of T, starting at "begin".
- static void destroy_array( void* begin, size_type n );
+ static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );
//! Exception-aware helper class for filling a segment by exception-danger operators of user class
- class internal_loop_guide {
+ class internal_loop_guide : internal::no_copy {
public:
const pointer array;
const size_type n;
@@ -808,7 +805,11 @@ T& concurrent_vector<T, A>::internal_subscript( size_type index ) const {
size_type j = index;
segment_index_t k = segment_base_index_of( j );
// no need in __TBB_load_with_acquire since thread works in own space or gets
+#if TBB_USE_THREADING_TOOLS
+ return static_cast<T*>( tbb::internal::itt_load_pointer_v3(&my_segment[k].array))[j];
+#else
return static_cast<T*>(my_segment[k].array)[j];
+#endif /* TBB_USE_THREADING_TOOLS */
}
template<typename T, class A>
@@ -828,19 +829,39 @@ T& concurrent_vector<T, A>::internal_subscript_with_exceptions( size_type index
template<typename T, class A>
void concurrent_vector<T, A>::internal_assign(size_type n, const_reference t)
{
+ __TBB_ASSERT(my_early_size == 0, NULL);
if( !n ) return;
- internal_reserve(n, sizeof(T), max_size()); my_early_size = n;
- __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
- initialize_array_by(static_cast<T*>(my_segment[0].array), static_cast<const void*>(&t), n);
+ internal_reserve(n, sizeof(T), max_size());
+ my_early_size = n;
+ segment_index_t k = 0;
+ size_type sz = segment_size( my_first_block );
+ while( sz < n ) {
+ initialize_array_by(static_cast<T*>(my_segment[k].array), static_cast<const void*>(&t), sz);
+ n -= sz;
+ if( !k ) k = my_first_block;
+ else { ++k; sz <<= 1; }
+ }
+ initialize_array_by(static_cast<T*>(my_segment[k].array), static_cast<const void*>(&t), n);
}
template<typename T, class A> template<class I>
void concurrent_vector<T, A>::internal_assign_iterators(I first, I last) {
+ __TBB_ASSERT(my_early_size == 0, NULL);
size_type n = std::distance(first, last);
if( !n ) return;
- internal_reserve(n, sizeof(T), max_size()); my_early_size = n;
- __TBB_ASSERT( my_first_block == segment_index_of(n-1)+1, NULL );
- internal_loop_guide loop(n, my_segment[0].array); loop.iterate(first);
+ internal_reserve(n, sizeof(T), max_size());
+ my_early_size = n;
+ segment_index_t k = 0;
+ size_type sz = segment_size( my_first_block );
+ while( sz < n ) {
+ internal_loop_guide loop(sz, my_segment[k].array);
+ loop.iterate(first);
+ n -= sz;
+ if( !k ) k = my_first_block;
+ else { ++k; sz <<= 1; }
+ }
+ internal_loop_guide loop(n, my_segment[k].array);
+ loop.iterate(first);
}
template<typename T, class A>
@@ -863,12 +884,20 @@ void concurrent_vector<T, A>::assign_array( void* dst, const void* src, size_typ
internal_loop_guide loop(n, dst); loop.assign(src);
}
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+ // Workaround for overzealous compiler warning
+ #pragma warning (push)
+ #pragma warning (disable: 4189)
+#endif
template<typename T, class A>
void concurrent_vector<T, A>::destroy_array( void* begin, size_type n ) {
T* array = static_cast<T*>(begin);
for( size_type j=n; j>0; --j )
array[j-1].~T(); // destructors are supposed to not throw any exceptions
}
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif // warning 4189 is back
// concurrent_vector's template functions
template<typename T, class A1, class A2>
@@ -909,9 +938,8 @@ inline void swap(concurrent_vector<T, A> &a, concurrent_vector<T, A> &b)
} // namespace tbb
-#if defined(_MSC_VER) && defined(_Wp64)
- // Workaround for overzealous compiler warnings in /Wp64 mode
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_Wp64)
#pragma warning (pop)
-#endif /* _MSC_VER && _Wp64 */
+#endif // warning 4267 is back
#endif /* __TBB_concurrent_vector_H */
diff --git a/include/tbb/machine/ibm_aix51.h b/include/tbb/machine/ibm_aix51.h
index 8df0e9a..4390115 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/include/tbb/machine/ibm_aix51.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/machine/linux_common.h b/include/tbb/machine/linux_common.h
index c2b824e..35bff25 100644
--- a/include/tbb/machine/linux_common.h
+++ b/include/tbb/machine/linux_common.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -69,10 +69,10 @@ namespace internal {
inline int futex_wait( void *futex, int comparand ) {
int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
int e = errno;
__TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)), "futex_wait failed." );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
return r;
}
diff --git a/include/tbb/machine/linux_em64t.h b/include/tbb/machine/linux_em64t.h
index 1a76cc6..9e955d6 100644
--- a/include/tbb/machine/linux_em64t.h
+++ b/include/tbb/machine/linux_em64t.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -39,33 +39,33 @@
#define __TBB_fence_for_release() __asm__ __volatile__("": : :"memory")
#define __MACHINE_DECL_ATOMICS(S,T,X) \
-static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
{ \
T result; \
\
- __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
- : "=a"(result), "=m"(*(T *)ptr) \
- : "q"(value), "0"(comparand) \
+ __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
+ : "=a"(result), "=m"(*(T *)ptr) \
+ : "q"(value), "0"(comparand), "m"(*(T *)ptr) \
: "memory"); \
return result; \
} \
\
-static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
{ \
T result; \
- __asm__ __volatile__("lock\nxadd" X " %0,%1" \
- : "=r"(result),"=m"(*(T *)ptr) \
- : "0"(addend) \
+ __asm__ __volatile__("lock\nxadd" X " %0,%1" \
+ : "=r"(result),"=m"(*(T *)ptr) \
+ : "0"(addend), "m"(*(T *)ptr) \
: "memory"); \
return result; \
} \
\
-static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
+static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
{ \
T result; \
- __asm__ __volatile__("lock\nxchg" X " %0,%1" \
- : "=r"(result),"=m"(*(T *)ptr) \
- : "0"(value) \
+ __asm__ __volatile__("lock\nxchg" X " %0,%1" \
+ : "=r"(result),"=m"(*(T *)ptr) \
+ : "0"(value), "m"(*(T *)ptr) \
: "memory"); \
return result; \
} \
@@ -82,11 +82,11 @@ static inline int64_t __TBB_machine_lg( uint64_t x ) {
}
static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
- __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend) : "memory");
+ __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend), "m"(*(uint64_t *)ptr) : "memory");
}
static inline void __TBB_machine_and( volatile void *ptr, uint64_t addend ) {
- __asm__ __volatile__("lock\nandq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend) : "memory");
+ __asm__ __volatile__("lock\nandq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend), "m"(*(uint64_t *)ptr) : "memory");
}
static inline void __TBB_machine_pause( int32_t delay ) {
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
index 77e8f9c..b9030f9 100644
--- a/include/tbb/machine/linux_ia32.h
+++ b/include/tbb/machine/linux_ia32.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -37,62 +37,77 @@
#define __MACHINE_DECL_ATOMICS(S,T,X) \
-static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
{ \
T result; \
\
- __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
- : "=a"(result), "=m"(*(T *)ptr) \
- : "q"(value), "0"(comparand) \
+ __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
+ : "=a"(result), "=m"(*(T *)ptr) \
+ : "q"(value), "0"(comparand), "m"(*(T *)ptr) \
: "memory"); \
return result; \
} \
\
-static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
{ \
T result; \
- __asm__ __volatile__("lock\nxadd" X " %0,%1" \
- : "=r"(result), "=m"(*(T *)ptr) \
- : "0"(addend) \
+ __asm__ __volatile__("lock\nxadd" X " %0,%1" \
+ : "=r"(result), "=m"(*(T *)ptr) \
+ : "0"(addend), "m"(*(T *)ptr) \
: "memory"); \
- return result; \
+ return result; \
} \
\
-static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
+static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
{ \
T result; \
- __asm__ __volatile__("lock\nxchg" X " %0,%1" \
- : "=r"(result), "=m"(*(T *)ptr) \
- : "0"(value) \
+ __asm__ __volatile__("lock\nxchg" X " %0,%1" \
+ : "=r"(result), "=m"(*(T *)ptr) \
+ : "0"(value), "m"(*(T *)ptr) \
: "memory"); \
- return result; \
+ return result; \
} \
__MACHINE_DECL_ATOMICS(1,int8_t,"")
__MACHINE_DECL_ATOMICS(2,int16_t,"")
__MACHINE_DECL_ATOMICS(4,int32_t,"l")
-static int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+static inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
{
int64_t result;
+#if __PIC__
+ /* compiling position-independent code */
+ // EBX register preserved for compliancy with position-independent code rules on IA32
+ __asm__ __volatile__ (
+ "pushl %%ebx\n\t"
+ "movl (%%ecx),%%ebx\n\t"
+ "movl 4(%%ecx),%%ecx\n\t"
+ "lock\n\t cmpxchg8b %1\n\t"
+ "popl %%ebx"
+ : "=A"(result), "=m"(*(int64_t *)ptr)
+ : "m"(*(int64_t *)ptr)
+ , "0"(comparand)
+ , "c"(&value)
+ : "memory", "esp"
+#if __INTEL_COMPILER
+ ,"ebx"
+#endif
+ );
+#else /* !__PIC__ */
union {
- int64_t comparand_local;
- int32_t comparand_parts[2];
+ int64_t i64;
+ int32_t i32[2];
};
- comparand_local = comparand;
- // EBX register saved for compliancy with position-independent code (PIC) rules on IA32
+ i64 = value;
__asm__ __volatile__ (
- "pushl %%ebx\n\t"
- "movl (%%ecx),%%ebx\n\t"
- "movl 4(%%ecx),%%ecx\n\t"
- "lock\ncmpxchg8b (%2)\n\t"
- "popl %%ebx"
- : "=A"(result), "=m"(*(int64_t *)ptr)
- : "S"(ptr),
- "a"(comparand_parts[0]),
- "d"(comparand_parts[1]),
- "c"(&value)
- : "memory", "esp");
+ "lock\n\t cmpxchg8b %1\n\t"
+ : "=A"(result), "=m"(*(int64_t *)ptr)
+ : "m"(*(int64_t *)ptr)
+ , "0"(comparand)
+ , "b"(i32[0]), "c"(i32[1])
+ : "memory"
+ );
+#endif /* __PIC__ */
return result;
}
@@ -103,11 +118,11 @@ static inline int32_t __TBB_machine_lg( uint32_t x ) {
}
static inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {
- __asm__ __volatile__("lock\norl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend) : "memory");
+ __asm__ __volatile__("lock\norl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend), "m"(*(uint32_t *)ptr) : "memory");
}
static inline void __TBB_machine_and( volatile void *ptr, uint32_t addend ) {
- __asm__ __volatile__("lock\nandl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend) : "memory");
+ __asm__ __volatile__("lock\nandl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend), "m"(*(uint32_t *)ptr) : "memory");
}
static inline void __TBB_machine_pause( int32_t delay ) {
@@ -122,7 +137,7 @@ static inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
if( ((uint32_t)ptr&7u)==0 ) {
// Aligned load
__asm__ __volatile__ ( "fildq %1\n\t"
- "fistpq %0" : "=m"(result) : "m"(*(uint64_t *)ptr), "m"(result) : "memory" );
+ "fistpq %0" : "=m"(result) : "m"(*(uint64_t *)ptr) : "memory" );
} else {
// Unaligned load
result = __TBB_machine_cmpswp8((void*)ptr,0,0);
@@ -133,14 +148,18 @@ static inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
//! Handles misaligned 8-byte store
/** Defined in tbb_misc.cpp */
extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value );
+extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr );
static inline void __TBB_machine_store8(volatile void *ptr, int64_t value) {
if( ((uint32_t)ptr&7u)==0 ) {
// Aligned store
__asm__ __volatile__ ( "fildq %1\n\t"
- "fistpq (%2)" : "=m"(*(int64_t *)ptr) : "m"(value), "r"(ptr) : "memory" );
+ "fistpq %0" : "=m"(*(int64_t *)ptr) : "m"(value) : "memory" );
} else {
// Unaligned store
+#if TBB_USE_PERFORMANCE_WARNINGS
+ __TBB_machine_store8_slow_perf_warning(ptr);
+#endif /* TBB_USE_PERFORMANCE_WARNINGS */
__TBB_machine_store8_slow(ptr,value);
}
}
diff --git a/include/tbb/machine/linux_itanium.h b/include/tbb/machine/linux_itanium.h
index a004b68..e458f90 100644
--- a/include/tbb/machine/linux_itanium.h
+++ b/include/tbb/machine/linux_itanium.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
index 3f0c0c2..a950137 100644
--- a/include/tbb/machine/mac_ppc.h
+++ b/include/tbb/machine/mac_ppc.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -30,27 +30,24 @@
#error Do not include this file directly; include tbb_machine.h instead
#endif
-#define __TBB_WORDSIZE 8
-#define __TBB_BIG_ENDIAN 1
-
#include <stdint.h>
#include <unistd.h>
-#include <sched.h>
+#include <sched.h> // sched_yield
inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )
{
int32_t result;
__asm__ __volatile__("sync\n"
- "0: lwarx %0,0,%1\n\t" /* load w/ reservation */
- "cmpw %0,%3\n\t" /* compare against comparand */
+ "0: lwarx %0,0,%2\n\t" /* load w/ reservation */
+ "cmpw %0,%4\n\t" /* compare against comparand */
"bne- 1f\n\t" /* exit if not same */
- "stwcx. %2,0,%1\n\t" /* store new_value */
+ "stwcx. %3,0,%2\n\t" /* store new_value */
"bne- 0b\n" /* retry if reservation lost */
"1: sync" /* the exit */
- : "=&r"(result)
- : "r"(ptr), "r"(value), "r"(comparand)
+ : "=&r"(result), "=m"(* (int32_t*) ptr)
+ : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int32_t*) ptr)
: "cr0");
return result;
}
@@ -59,21 +56,25 @@ inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t
{
int64_t result;
__asm__ __volatile__("sync\n"
- "0: ldarx %0,0,%1\n\t" /* load w/ reservation */
- "cmpd %0,%3\n\t" /* compare against comparand */
+ "0: ldarx %0,0,%2\n\t" /* load w/ reservation */
+ "cmpd %0,%4\n\t" /* compare against comparand */
"bne- 1f\n\t" /* exit if not same */
- "stdcx. %2,0,%1\n\t" /* store new_value */
+ "stdcx. %3,0,%2\n\t" /* store new_value */
"bne- 0b\n" /* retry if reservation lost */
"1: sync" /* the exit */
- : "=&b"(result)
- : "r"(ptr), "r"(value), "r"(comparand)
+ : "=&b"(result), "=m"(* (int64_t*) ptr)
+ : "r"(ptr), "r"(value), "r"(comparand), "m"(* (int64_t*) ptr)
: "cr0");
return result;
}
+#define __TBB_BIG_ENDIAN 1
+
#if defined(powerpc64) || defined(__powerpc64__) || defined(__ppc64__)
+#define __TBB_WORDSIZE 8
#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
#else
+#define __TBB_WORDSIZE 4
#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
#endif
diff --git a/include/tbb/machine/windows_em64t.h b/include/tbb/machine/windows_em64t.h
index bc39d14..7a63f7f 100644
--- a/include/tbb/machine/windows_em64t.h
+++ b/include/tbb/machine/windows_em64t.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -30,7 +30,17 @@
#error Do not include this file directly; include tbb_machine.h instead
#endif
-#include <windows.h>
+#include <intrin.h>
+#if !defined(__INTEL_COMPILER)
+#pragma intrinsic(_InterlockedOr64)
+#pragma intrinsic(_InterlockedAnd64)
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedExchangeAdd64)
+#pragma intrinsic(_InterlockedExchange)
+#pragma intrinsic(_InterlockedExchange64)
+#endif /* !defined(__INTEL_COMPILER) */
#if defined(__INTEL_COMPILER)
#define __TBB_fence_for_acquire() __asm { __asm nop }
@@ -48,13 +58,13 @@ extern "C" void _ReadWriteBarrier();
// ATTENTION: if you ever change argument types in machine-specific primitives,
// please take care of atomic_word<> specializations in tbb/atomic.h
extern "C" {
- __int8 __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );
- __int8 __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );
- __int8 __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );
- __int16 __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );
- __int16 __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );
- __int16 __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );
- void __TBB_machine_pause (__int32 delay );
+ __int8 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );
+ __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );
+ __int8 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );
+ __int16 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );
+ __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );
+ __int16 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );
+ void __TBB_EXPORTED_FUNC __TBB_machine_pause (__int32 delay );
}
@@ -78,31 +88,31 @@ inline __int64 __TBB_machine_lg( unsigned __int64 i ) {
return j;
}
-inline void __TBB_machine_OR( volatile void *operand, uintptr_t addend ) {
- InterlockedOr64((LONGLONG *)operand, addend);
+inline void __TBB_machine_OR( volatile void *operand, intptr_t addend ) {
+ _InterlockedOr64((__int64*)operand, addend);
}
-inline void __TBB_machine_AND( volatile void *operand, uintptr_t addend ) {
- InterlockedAnd64((LONGLONG *)operand, addend);
+inline void __TBB_machine_AND( volatile void *operand, intptr_t addend ) {
+ _InterlockedAnd64((__int64*)operand, addend);
}
#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
-#define __TBB_CompareAndSwap4(P,V,C) InterlockedCompareExchange( (LONG *) P , V , C )
-#define __TBB_CompareAndSwap8(P,V,C) InterlockedCompareExchange64( (LONGLONG *) P , V , C )
-#define __TBB_CompareAndSwapW(P,V,C) InterlockedCompareExchange64( (LONGLONG *) P , V , C )
+#define __TBB_CompareAndSwap4(P,V,C) _InterlockedCompareExchange( (long*) P , V , C )
+#define __TBB_CompareAndSwap8(P,V,C) _InterlockedCompareExchange64( (__int64*) P , V , C )
+#define __TBB_CompareAndSwapW(P,V,C) _InterlockedCompareExchange64( (__int64*) P , V , C )
#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
-#define __TBB_FetchAndAdd4(P,V) ( InterlockedAdd((LONG *) P , V ) - V )
-#define __TBB_FetchAndAdd8(P,V) ( InterlockedAdd64((LONGLONG *) P , V ) - V )
-#define __TBB_FetchAndAddW(P,V) ( InterlockedAdd64((LONGLONG *) P , V ) - V )
+#define __TBB_FetchAndAdd4(P,V) _InterlockedExchangeAdd((long*) P , V )
+#define __TBB_FetchAndAdd8(P,V) _InterlockedExchangeAdd64((__int64*) P , V )
+#define __TBB_FetchAndAddW(P,V) _InterlockedExchangeAdd64((__int64*) P , V )
#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
-#define __TBB_FetchAndStore4(P,V) InterlockedExchange((LONG *) P , V )
-#define __TBB_FetchAndStore8(P,V) InterlockedExchange64((LONGLONG *) P , V )
-#define __TBB_FetchAndStoreW(P,V) InterlockedExchange64((LONGLONG *) P , V )
+#define __TBB_FetchAndStore4(P,V) _InterlockedExchange((long*) P , V )
+#define __TBB_FetchAndStore8(P,V) _InterlockedExchange64((__int64*) P , V )
+#define __TBB_FetchAndStoreW(P,V) _InterlockedExchange64((__int64*) P , V )
// Not used if wordsize == 8
#undef __TBB_Store8
@@ -111,10 +121,7 @@ inline void __TBB_machine_AND( volatile void *operand, uintptr_t addend ) {
#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
-// Definition of other functions
-#if !defined(_WIN32_WINNT)
-extern "C" BOOL WINAPI SwitchToThread(void);
-#endif
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
#define __TBB_Yield() SwitchToThread()
#define __TBB_Pause(V) __TBB_machine_pause(V)
#define __TBB_Log2(V) __TBB_machine_lg(V)
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
index 65e4095..cb9fa23 100644
--- a/include/tbb/machine/windows_ia32.h
+++ b/include/tbb/machine/windows_ia32.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -30,8 +30,6 @@
#error Do not include this file directly; include tbb_machine.h instead
#endif
-#include <windows.h>
-
#if defined(__INTEL_COMPILER)
#define __TBB_fence_for_acquire() __asm { __asm nop }
#define __TBB_fence_for_release() __asm { __asm nop }
@@ -45,19 +43,19 @@ extern "C" void _ReadWriteBarrier();
#define __TBB_WORDSIZE 4
#define __TBB_BIG_ENDIAN 0
-#if defined(_MSC_VER) && defined(_Wp64)
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (push)
#pragma warning (disable: 4244 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
extern "C" {
- __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );
- __int64 __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );
- __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );
- void __TBB_machine_store8 (volatile void *ptr, __int64 value );
- __int64 __TBB_machine_load8 (const volatile void *ptr);
- bool __TBB_machine_trylockbyte ( volatile unsigned char& flag );
+ __int64 __TBB_EXPORTED_FUNC __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );
+ __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );
+ __int64 __TBB_EXPORTED_FUNC __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );
+ void __TBB_EXPORTED_FUNC __TBB_machine_store8 (volatile void *ptr, __int64 value );
+ __int64 __TBB_EXPORTED_FUNC __TBB_machine_load8 (const volatile void *ptr);
+ bool __TBB_EXPORTED_FUNC __TBB_machine_trylockbyte ( volatile unsigned char& flag );
}
template <typename T, size_t S>
@@ -99,12 +97,16 @@ inline void __TBB_machine_store_with_release(T& location, V value) {
__TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
}
+//! Overload that exists solely to avoid /Wp64 warnings.
+inline void __TBB_machine_store_with_release(size_t& location, size_t value) {
+ __TBB_machine_load_store<size_t,sizeof(size_t)>::store_with_release(location,value);
+}
+
#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
-
-#define DEFINE_ATOMICS(S,T,A,C) \
-static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, T value, T comparand ) { \
+#define __TBB_DEFINE_ATOMICS(S,T,U,A,C) \
+static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, U value, U comparand ) { \
T result; \
volatile T *p = (T *)ptr; \
__asm \
@@ -119,7 +121,7 @@ static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, T value, T compar
return result; \
} \
\
-static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, T addend ) { \
+static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, U addend ) { \
T result; \
volatile T *p = (T *)ptr; \
__asm \
@@ -133,7 +135,7 @@ static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, T addend ) { \
return result; \
}\
\
-static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, T value ) { \
+static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, U value ) { \
T result; \
volatile T *p = (T *)ptr; \
__asm \
@@ -147,9 +149,9 @@ static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, T value ) { \
return result; \
}
-DEFINE_ATOMICS(1, __int8, al, cl)
-DEFINE_ATOMICS(2, __int16, ax, cx)
-DEFINE_ATOMICS(4, __int32, eax, ecx)
+__TBB_DEFINE_ATOMICS(1, __int8, __int8, al, cl)
+__TBB_DEFINE_ATOMICS(2, __int16, __int16, ax, cx)
+__TBB_DEFINE_ATOMICS(4, __int32, ptrdiff_t, eax, ecx)
static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
unsigned __int32 j;
@@ -161,7 +163,7 @@ static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
return j;
}
-static inline void __TBB_machine_OR( volatile void *operand, unsigned __int32 addend ) {
+static inline void __TBB_machine_OR( volatile void *operand, __int32 addend ) {
__asm
{
mov eax, addend
@@ -170,7 +172,7 @@ static inline void __TBB_machine_OR( volatile void *operand, unsigned __int32 ad
}
}
-static inline void __TBB_machine_AND( volatile void *operand, unsigned __int32 addend ) {
+static inline void __TBB_machine_AND( volatile void *operand, __int32 addend ) {
__asm
{
mov eax, addend
@@ -216,9 +218,7 @@ static inline void __TBB_machine_pause (__int32 delay ) {
#define __TBB_AtomicAND(P,V) __TBB_machine_AND(P,V)
// Definition of other functions
-#if !defined(_WIN32_WINNT)
-extern "C" BOOL WINAPI SwitchToThread(void);
-#endif
+extern "C" __declspec(dllimport) int __stdcall SwitchToThread( void );
#define __TBB_Yield() SwitchToThread()
#define __TBB_Pause(V) __TBB_machine_pause(V)
#define __TBB_Log2(V) __TBB_machine_lg(V)
@@ -239,7 +239,6 @@ static inline void __TBB_x86_cpuid( __int32 buffer[4], __int32 mode ) {
}
}
-#if defined(_MSC_VER) && defined(_Wp64)
- // Workaround for overzealous compiler warnings in /Wp64 mode
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
#pragma warning (pop)
-#endif /* _MSC_VER && _Wp64 */
+#endif // warnings 4244, 4267 are back
diff --git a/include/tbb/machine/windows_ia32_inline.h b/include/tbb/machine/windows_ia32_inline.h
index 861358e..90095c2 100644
--- a/include/tbb/machine/windows_ia32_inline.h
+++ b/include/tbb/machine/windows_ia32_inline.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/mutex.h b/include/tbb/mutex.h
index dee5f58..6308e42 100644
--- a/include/tbb/mutex.h
+++ b/include/tbb/mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -45,8 +45,8 @@ extern void handle_perror( int error_code, const char* what );
} } //namespaces
#endif /* _WIN32||_WIN64 */
-#include <stdio.h>
#include "tbb_stddef.h"
+#include "tbb_profiling.h"
namespace tbb {
@@ -57,7 +57,7 @@ class mutex {
public:
//! Construct unacquired mutex.
mutex() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS
internal_construct();
#else
#if _WIN32||_WIN64
@@ -67,11 +67,11 @@ public:
if( error_code )
tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
#endif /* _WIN32||_WIN64*/
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
};
~mutex() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_destroy();
#else
#if _WIN32||_WIN64
@@ -80,7 +80,7 @@ public:
pthread_mutex_destroy(&impl);
#endif /* _WIN32||_WIN64 */
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
};
class scoped_lock;
@@ -89,7 +89,7 @@ public:
//! The scoped locking pattern
/** It helps to avoid the common problem of forgetting to release lock.
It also nicely provides the "node" for queuing locks. */
- class scoped_lock : private internal::no_copy {
+ class scoped_lock : internal::no_copy {
public:
//! Construct lock that has not acquired a mutex.
scoped_lock() : my_mutex(NULL) {};
@@ -108,7 +108,7 @@ public:
//! Acquire lock on given mutex.
void acquire( mutex& mutex ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_acquire(mutex);
#else
my_mutex = &mutex;
@@ -117,12 +117,12 @@ public:
#else
pthread_mutex_lock(&mutex.impl);
#endif /* _WIN32||_WIN64 */
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
//! Try acquire lock on given mutex.
bool try_acquire( mutex& mutex ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
return internal_try_acquire (mutex);
#else
bool result;
@@ -134,12 +134,12 @@ public:
if( result )
my_mutex = &mutex;
return result;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
//! Release lock
void release() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_release ();
#else
#if _WIN32||_WIN64
@@ -148,7 +148,7 @@ public:
pthread_mutex_unlock(&my_mutex->impl);
#endif /* _WIN32||_WIN64 */
my_mutex = NULL;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
private:
@@ -156,13 +156,13 @@ public:
mutex* my_mutex;
//! All checks from acquire using mutex.state were moved here
- void internal_acquire( mutex& m );
+ void __TBB_EXPORTED_METHOD internal_acquire( mutex& m );
//! All checks from try_acquire using mutex.state were moved here
- bool internal_try_acquire( mutex& m );
+ bool __TBB_EXPORTED_METHOD internal_try_acquire( mutex& m );
//! All checks from release using mutex.state were moved here
- void internal_release();
+ void __TBB_EXPORTED_METHOD internal_release();
};
// Mutex traits
@@ -183,12 +183,14 @@ private:
#endif /* _WIN32||_WIN64 */
//! All checks from mutex constructor using mutex.state were moved here
- void internal_construct();
+ void __TBB_EXPORTED_METHOD internal_construct();
//! All checks from mutex destructor using mutex.state were moved here
- void internal_destroy();
+ void __TBB_EXPORTED_METHOD internal_destroy();
};
+__TBB_DEFINE_PROFILING_SET_NAME(mutex)
+
} // namespace tbb
#endif /* __TBB_mutex_H */
diff --git a/src/tbb/concurrent_hash_map.cpp b/include/tbb/null_mutex.h
similarity index 63%
copy from src/tbb/concurrent_hash_map.cpp
copy to include/tbb/null_mutex.h
index 528e15a..0993f0b 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/include/tbb/null_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,20 +26,34 @@
the GNU General Public License.
*/
-#include "tbb/concurrent_hash_map.h"
+#ifndef __TBB_null_mutex_H
+#define __TBB_null_mutex_H
namespace tbb {
+
+class null_mutex {
+ //! Deny assignment and copy construction
+ null_mutex( const null_mutex& );
+ void operator=( const null_mutex& );
+public:
+ class scoped_lock {
+ public:
+ scoped_lock() {}
+ scoped_lock( null_mutex& ) {}
+ ~scoped_lock() {}
+ void acquire( null_mutex& ) {}
+ bool try_acquire( null_mutex& ) { return true; }
+ void release() {}
+ };
+
+ null_mutex() {}
+
+ // Mutex traits
+ static const bool is_rw_mutex = false;
+ static const bool is_recursive_mutex = true;
+ static const bool is_fair_mutex = true;
+};
-namespace internal {
-
-bool hash_map_segment_base::internal_grow_predicate() const {
- // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the
- // library so that Intel(R) Thread Checker will ignore them. The reads are used in a double-check
- // context, so the program is nonetheless correct despite the race.
- return my_logical_size >= my_physical_size && my_physical_size < internal::hash_map_base::max_physical_size;
}
-} // namespace internal
-
-} // namespace tbb
-
+#endif /* __TBB_null_mutex_H */
diff --git a/src/tbb/concurrent_hash_map.cpp b/include/tbb/null_rw_mutex.h
similarity index 58%
copy from src/tbb/concurrent_hash_map.cpp
copy to include/tbb/null_rw_mutex.h
index 528e15a..d558052 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/include/tbb/null_rw_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,20 +26,36 @@
the GNU General Public License.
*/
-#include "tbb/concurrent_hash_map.h"
+#ifndef __TBB_null_rw_mutex_H
+#define __TBB_null_rw_mutex_H
namespace tbb {
+
+class null_rw_mutex {
+ //! Deny assignment and copy construction
+ null_rw_mutex( const null_rw_mutex& );
+ void operator=( const null_rw_mutex& );
+public:
+ class scoped_lock {
+ public:
+ scoped_lock() {}
+ scoped_lock( null_rw_mutex& , bool = true ) {}
+ ~scoped_lock() {}
+ void acquire( null_rw_mutex& , bool = true ) {}
+ bool upgrade_to_writer() { return true; }
+ bool downgrade_to_reader() { return true; }
+ bool try_acquire( null_rw_mutex& , bool = true ) { return true; }
+ void release() {}
+ };
+
+ null_rw_mutex() {}
+
+ // Mutex traits
+ static const bool is_rw_mutex = true;
+ static const bool is_recursive_mutex = true;
+ static const bool is_fair_mutex = true;
+};
-namespace internal {
-
-bool hash_map_segment_base::internal_grow_predicate() const {
- // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the
- // library so that Intel(R) Thread Checker will ignore them. The reads are used in a double-check
- // context, so the program is nonetheless correct despite the race.
- return my_logical_size >= my_physical_size && my_physical_size < internal::hash_map_base::max_physical_size;
}
-} // namespace internal
-
-} // namespace tbb
-
+#endif /* __TBB_null_rw_mutex_H */
diff --git a/include/tbb/parallel_do.h b/include/tbb/parallel_do.h
index 1613ca8..2e7339d 100644
--- a/include/tbb/parallel_do.h
+++ b/include/tbb/parallel_do.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -169,6 +169,25 @@ namespace internal {
public:
const Body* my_body;
empty_task* my_barrier;
+
+ parallel_do_feeder_impl()
+ {
+ my_barrier = new( task::allocate_root() ) empty_task();
+ __TBB_ASSERT(my_barrier, "root task allocation failed");
+ }
+
+#if __TBB_EXCEPTIONS
+ parallel_do_feeder_impl(tbb::task_group_context &context)
+ {
+ my_barrier = new( task::allocate_root(context) ) empty_task();
+ __TBB_ASSERT(my_barrier, "root task allocation failed");
+ }
+#endif
+
+ ~parallel_do_feeder_impl()
+ {
+ my_barrier->destroy(*my_barrier);
+ }
}; // class parallel_do_feeder_impl
@@ -267,7 +286,7 @@ namespace internal {
do_task_iter( Iterator first, Iterator last , feeder_type& feeder ) :
my_first(first), my_last(last), my_feeder(feeder)
{}
-
+
private:
Iterator my_first;
Iterator my_last;
@@ -374,38 +393,58 @@ namespace internal {
/** Implements parallel iteration over a range.
@ingroup algorithms */
template<typename Iterator, typename Body, typename Item>
- void run_parallel_do( Iterator first, Iterator last, const Body& body )
+ void run_parallel_do( Iterator first, Iterator last, const Body& body
+#if __TBB_EXCEPTIONS
+ , task_group_context& context
+#endif
+ )
{
typedef do_task_iter<Iterator, Body, Item> root_iteration_task;
+#if __TBB_EXCEPTIONS
+ parallel_do_feeder_impl<Body, Item> feeder(context);
+#else
parallel_do_feeder_impl<Body, Item> feeder;
+#endif
feeder.my_body = &body;
- feeder.my_barrier = new( task::allocate_root() ) empty_task();
- __TBB_ASSERT(feeder.my_barrier, "root task allocation failed");
root_iteration_task &t = *new( feeder.my_barrier->allocate_child() ) root_iteration_task(first, last, feeder);
feeder.my_barrier->set_ref_count(2);
feeder.my_barrier->spawn_and_wait_for_all(t);
-
- feeder.my_barrier->destroy(*feeder.my_barrier);
}
//! For internal use only.
/** Detects types of Body's operator function arguments.
@ingroup algorithms **/
template<typename Iterator, typename Body, typename Item>
- void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const )
+ void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item) const
+#if __TBB_EXCEPTIONS
+ , task_group_context& context
+#endif // __TBB_EXCEPTIONS
+ )
{
- run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body );
+ run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+#if __TBB_EXCEPTIONS
+ , context
+#endif // __TBB_EXCEPTIONS
+ );
}
//! For internal use only.
/** Detects types of Body's operator function arguments.
@ingroup algorithms **/
template<typename Iterator, typename Body, typename Item, typename _Item>
- void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const )
+ void select_parallel_do( Iterator first, Iterator last, const Body& body, void (Body::*)(Item, parallel_do_feeder<_Item>&) const
+#if __TBB_EXCEPTIONS
+ , task_group_context& context
+#endif // __TBB_EXCEPTIONS
+ )
{
- run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body );
+ run_parallel_do<Iterator, Body, typename strip<Item>::type>( first, last, body
+#if __TBB_EXCEPTIONS
+ , context
+#endif // __TBB_EXCEPTIONS
+ );
}
} // namespace internal
@@ -441,8 +480,28 @@ void parallel_do( Iterator first, Iterator last, const Body& body )
{
if ( first == last )
return;
- internal::select_parallel_do( first, last, body, &Body::operator() );
+#if __TBB_EXCEPTIONS
+ task_group_context context;
+#endif // __TBB_EXCEPTIONS
+ internal::select_parallel_do( first, last, body, &Body::operator()
+#if __TBB_EXCEPTIONS
+ , context
+#endif // __TBB_EXCEPTIONS
+ );
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration over a range, with optional addition of more work and user-supplied context
+/** @ingroup algorithms */
+template<typename Iterator, typename Body>
+void parallel_do( Iterator first, Iterator last, const Body& body, task_group_context& context )
+{
+ if ( first == last )
+ return;
+ internal::select_parallel_do( first, last, body, &Body::operator(), context );
}
+#endif // __TBB_EXCEPTIONS
+
//@}
} // namespace
diff --git a/include/tbb/parallel_for.h b/include/tbb/parallel_for.h
index 991a34f..62efd28 100644
--- a/include/tbb/parallel_for.h
+++ b/include/tbb/parallel_for.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
index e01fd19..e6ded7f 100644
--- a/include/tbb/parallel_reduce.h
+++ b/include/tbb/parallel_reduce.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -40,25 +40,25 @@ namespace tbb {
namespace internal {
//! ITT instrumented routine that stores src into location pointed to by dst.
- void itt_store_pointer_with_release_v3( void* dst, void* src );
+ void __TBB_EXPORTED_FUNC itt_store_pointer_with_release_v3( void* dst, void* src );
//! ITT instrumented routine that loads pointer from location pointed to by src.
- void* itt_load_pointer_with_acquire_v3( const void* src );
+ void* __TBB_EXPORTED_FUNC itt_load_pointer_with_acquire_v3( const void* src );
template<typename T> inline void parallel_reduce_store_body( T*& dst, T* src ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS
itt_store_pointer_with_release_v3(&dst,src);
#else
__TBB_store_with_release(dst,src);
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS */
}
template<typename T> inline T* parallel_reduce_load_body( T*& src ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS
return static_cast<T*>(itt_load_pointer_with_acquire_v3(&src));
#else
return __TBB_load_with_acquire(src);
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS */
}
//! Task type use to combine the partial results of parallel_reduce.
@@ -115,7 +115,7 @@ namespace internal {
}
//! Process a steal.
/** Affinity is never set, so if this method is called, it must arise because this is stolen. */
- /*override*/ void note_affinity( affinity_id id ) {
+ /*override*/ void note_affinity( affinity_id /*id*/ ) {
finish_type* p = static_cast<finish_type*>(parent() );
Body* body = new( p->zombie_space.begin() ) Body(*my_body,split());
p->has_right_zombie = true;
@@ -274,6 +274,52 @@ public:
return this;
}
}
+
+ //! Auxiliary class for parallel_reduce; for internal use only.
+ /** The adaptor class that implements \ref parallel_reduce_body_req "parallel_reduce Body"
+ using given \ref parallel_reduce_lambda_req "anonymous function objects".
+ **/
+ /** @ingroup algorithms */
+ template<typename Range, typename Value, typename RealBody, typename Reduction>
+ class lambda_reduce_body {
+
+//FIXME: decide if my_real_body, my_reduction, and identity_element should be copied or referenced
+// (might require some performance measurements)
+
+ const Value& identity_element;
+ const RealBody& my_real_body;
+ const Reduction& my_reduction;
+ Value my_value;
+ public:
+ lambda_reduce_body( const Value& identity, const RealBody& body, const Reduction& reduction )
+ : identity_element(identity)
+ , my_real_body(body)
+ , my_reduction(reduction)
+ , my_value(identity)
+ { }
+ lambda_reduce_body( const lambda_reduce_body& other )
+ : identity_element(other.identity_element)
+ , my_real_body(other.my_real_body)
+ , my_reduction(other.my_reduction)
+ , my_value(other.my_value)
+ { }
+ lambda_reduce_body( lambda_reduce_body& other, tbb::split )
+ : identity_element(other.identity_element)
+ , my_real_body(other.my_real_body)
+ , my_reduction(other.my_reduction)
+ , my_value(other.identity_element)
+ { }
+ void operator()(Range& range) {
+ my_value = my_real_body(range, const_cast<const Value&>(my_value));
+ }
+ void join( lambda_reduce_body& rhs ) {
+ my_value = my_reduction(const_cast<const Value&>(my_value), const_cast<const Value&>(rhs.my_value));
+ }
+ Value result() const {
+ return my_value;
+ }
+ };
+
} // namespace internal
//! @endcond
@@ -290,11 +336,15 @@ public:
The result in \c b should be merged into the result of \c this
**/
+/** \page parallel_reduce_lambda_req Requirements on parallel_reduce anonymous function objects (lambda functions)
+ TO BE DOCUMENTED
+**/
+
/** \name parallel_reduce
See also requirements on \ref range_req "Range" and \ref parallel_reduce_body_req "parallel_reduce Body". **/
//@{
-//! Parallel iteration with reduction and simple_partitioner, or default partitioner if no partitioner is specified.
+//! Parallel iteration with reduction and simple_partitioner, or no partitioner specified.
/** @ingroup algorithms **/
template<typename Range, typename Body>
void parallel_reduce( const Range& range, Body& body, const simple_partitioner& partitioner = simple_partitioner() ) {
@@ -308,7 +358,7 @@ void parallel_reduce( const Range& range, Body& body, const auto_partitioner& pa
internal::start_reduce<Range,Body,auto_partitioner>::run( range, body, partitioner );
}
-//! Parallel iteration with reduction and auto_partitioner
+//! Parallel iteration with reduction and affinity_partitioner
/** @ingroup algorithms **/
template<typename Range, typename Body>
void parallel_reduce( const Range& range, Body& body, affinity_partitioner& partitioner ) {
@@ -337,6 +387,77 @@ void parallel_reduce( const Range& range, Body& body, affinity_partitioner& part
internal::start_reduce_with_affinity<Range,Body>::run( range, body, partitioner, context );
}
#endif /* __TBB_EXCEPTIONS */
+
+/** parallel_reduce overloads that work with anonymous function objects
+ (see also \ref parallel_reduce_lambda_req "requirements on parallel_reduce anonymous function objects"). **/
+
+//! Parallel iteration with reduction and simple_partitioner, or no partitioner specified.
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ const simple_partitioner& partitioner = simple_partitioner() ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,simple_partitioner>
+ ::run(range, body, partitioner );
+ return body.result();
+}
+
+//! Parallel iteration with reduction and auto_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ const auto_partitioner& partitioner ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,auto_partitioner>
+ ::run( range, body, partitioner );
+ return body.result();
+}
+
+//! Parallel iteration with reduction and affinity_partitioner
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ affinity_partitioner& partitioner ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce_with_affinity<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+ ::run( range, body, partitioner );
+ return body.result();
+}
+
+#if __TBB_EXCEPTIONS
+//! Parallel iteration with reduction, simple partitioner and user-supplied context.
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ const simple_partitioner& partitioner, task_group_context& context ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,simple_partitioner>
+ ::run( range, body, partitioner, context );
+ return body.result();
+}
+
+//! Parallel iteration with reduction, auto_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ const auto_partitioner& partitioner, task_group_context& context ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction>,auto_partitioner>
+ ::run( range, body, partitioner, context );
+ return body.result();
+}
+
+//! Parallel iteration with reduction, affinity_partitioner and user-supplied context
+/** @ingroup algorithms **/
+template<typename Range, typename Value, typename RealBody, typename Reduction>
+Value parallel_reduce( const Range& range, const Value& identity, const RealBody& real_body, const Reduction& reduction,
+ affinity_partitioner& partitioner, task_group_context& context ) {
+ internal::lambda_reduce_body<Range,Value,RealBody,Reduction> body(identity, real_body, reduction);
+ internal::start_reduce_with_affinity<Range,internal::lambda_reduce_body<Range,Value,RealBody,Reduction> >
+ ::run( range, body, partitioner, context );
+ return body.result();
+}
+#endif /* __TBB_EXCEPTIONS */
//@}
} // namespace tbb
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
index 8868c20..e670cf7 100644
--- a/include/tbb/parallel_scan.h
+++ b/include/tbb/parallel_scan.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/parallel_sort.h b/include/tbb/parallel_sort.h
index de7b244..38b380d 100644
--- a/include/tbb/parallel_sort.h
+++ b/include/tbb/parallel_sort.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -30,6 +30,7 @@
#define __TBB_parallel_sort_H
#include "parallel_for.h"
+#include "blocked_range.h"
#include <algorithm>
#include <iterator>
#include <functional>
@@ -40,10 +41,28 @@ namespace tbb {
namespace internal {
//! Range used in quicksort to split elements into subranges based on a value.
-/** The split operation selects a splitter and places all elements less than or equal to the value in the first range and the remaining elements in the second range.
+/** The split operation selects a splitter and places all elements less than or equal
+ to the value in the first range and the remaining elements in the second range.
@ingroup algorithms */
template<typename RandomAccessIterator, typename Compare>
-struct quick_sort_range {
+class quick_sort_range: private no_assign {
+
+ inline size_t median_of_three(const RandomAccessIterator &array, size_t l, size_t m, size_t r) const {
+ return comp(array[l], array[m]) ? ( comp(array[m], array[r]) ? m : ( comp( array[l], array[r]) ? r : l ) )
+ : ( comp(array[r], array[m]) ? m : ( comp( array[r], array[l] ) ? r : l ) );
+ }
+
+ inline size_t pseudo_median_of_nine( const RandomAccessIterator &array, const quick_sort_range &range ) const {
+ size_t offset = range.size/8u;
+ return median_of_three(array,
+ median_of_three(array, 0, offset, offset*2),
+ median_of_three(array, offset*3, offset*4, offset*5),
+ median_of_three(array, offset*6, offset*7, range.size - 1) );
+
+ }
+
+public:
+
static const size_t grainsize = 500;
const Compare ∁
RandomAccessIterator begin;
@@ -58,8 +77,8 @@ struct quick_sort_range {
quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
RandomAccessIterator array = range.begin;
RandomAccessIterator key0 = range.begin;
- size_t m = range.size/2u;
- std::swap ( array[0], array[m] );
+ size_t m = pseudo_median_of_nine(array, range);
+ if (m) std::swap ( array[0], array[m] );
size_t i=0;
size_t j=range.size;
@@ -92,6 +111,33 @@ partition:
}
};
+//! Body class used to test if elements in a range are presorted
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+class quick_sort_pretest_body : internal::no_assign {
+ const Compare ∁
+
+public:
+ quick_sort_pretest_body(const Compare &_comp) : comp(_comp) {}
+
+ void operator()( const blocked_range<RandomAccessIterator>& range ) const {
+ task &my_task = task::self();
+ RandomAccessIterator my_end = range.end();
+
+ int i = 0;
+ for (RandomAccessIterator k = range.begin(); k != my_end; ++k, ++i) {
+ if ( i%64 == 0 && my_task.is_cancelled() ) break;
+
+ // The k-1 is never out-of-range because the first chunk starts at begin+serial_cutoff+1
+ if ( comp( *(k), *(k-1) ) ) {
+ my_task.cancel_group_execution();
+ break;
+ }
+ }
+ }
+
+};
+
//! Body class used to sort elements in a range that is smaller than the grainsize.
/** @ingroup algorithms */
template<typename RandomAccessIterator, typename Compare>
@@ -106,7 +152,27 @@ struct quick_sort_body {
/** @ingroup algorithms */
template<typename RandomAccessIterator, typename Compare>
void parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {
- parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), quick_sort_body<RandomAccessIterator,Compare>() );
+ task_group_context my_context;
+ const int serial_cutoff = 9;
+
+ __TBB_ASSERT( begin + serial_cutoff < end, "min_parallel_size is smaller than serial cutoff?" );
+ RandomAccessIterator k;
+ for ( k = begin ; k != begin + serial_cutoff; ++k ) {
+ if ( comp( *(k+1), *k ) ) {
+ goto do_parallel_quick_sort;
+ }
+ }
+
+ parallel_for( blocked_range<RandomAccessIterator>(k+1, end),
+ quick_sort_pretest_body<RandomAccessIterator,Compare>(comp),
+ auto_partitioner(),
+ my_context);
+
+ if (my_context.is_group_execution_cancelled())
+do_parallel_quick_sort:
+ parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ),
+ quick_sort_body<RandomAccessIterator,Compare>(),
+ auto_partitioner() );
}
} // namespace internal
diff --git a/include/tbb/parallel_while.h b/include/tbb/parallel_while.h
index 12aa987..a4ad9e6 100644
--- a/include/tbb/parallel_while.h
+++ b/include/tbb/parallel_while.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/include/tbb/partitioner.h b/include/tbb/partitioner.h
index ebf07e6..4529760 100644
--- a/include/tbb/partitioner.h
+++ b/include/tbb/partitioner.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -36,7 +36,7 @@ class affinity_partitioner;
//! @cond INTERNAL
namespace internal {
-size_t get_initial_auto_partitioner_divisor();
+size_t __TBB_EXPORTED_FUNC get_initial_auto_partitioner_divisor();
//! Defines entry points into tbb run-time library;
/** The entry points are the constructor and destructor. */
@@ -53,16 +53,16 @@ class affinity_partitioner_base_v3: no_copy {
~affinity_partitioner_base_v3() {resize(0);}
//! Resize my_array.
/** Retains values if resulting size is the same. */
- void resize( unsigned factor );
+ void __TBB_EXPORTED_METHOD resize( unsigned factor );
friend class affinity_partition_type;
};
//! Provides default methods for partition objects without affinity.
class partition_type_base {
public:
- void set_affinity( task &t ) {}
- void note_affinity( task::affinity_id id ) {}
- task* continue_after_execute_range( task& t ) {return NULL;}
+ void set_affinity( task & ) {}
+ void note_affinity( task::affinity_id ) {}
+ task* continue_after_execute_range( task& ) {return NULL;}
bool decide_whether_to_delay() {return false;}
void spawn_or_delay( bool, task& a, task& b ) {
a.spawn(b);
@@ -92,8 +92,8 @@ private:
class partition_type: public internal::partition_type_base {
public:
- bool should_execute_range(const task &t) {return false;}
- partition_type( const simple_partitioner& sp ) {}
+ bool should_execute_range(const task& ) {return false;}
+ partition_type( const simple_partitioner& ) {}
partition_type( const partition_type&, split ) {}
};
};
@@ -120,7 +120,7 @@ public:
num_chunks = VICTIM_CHUNKS;
return num_chunks==1;
}
- partition_type( const auto_partitioner& ap ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
+ partition_type( const auto_partitioner& ) : num_chunks(internal::get_initial_auto_partitioner_divisor()) {}
partition_type( partition_type& pt, split ) {
num_chunks = pt.num_chunks /= 2u;
}
@@ -128,7 +128,7 @@ public:
};
//! An affinity partitioner
-class affinity_partitioner: private internal::affinity_partitioner_base_v3 {
+class affinity_partitioner: internal::affinity_partitioner_base_v3 {
public:
affinity_partitioner() {}
@@ -208,6 +208,14 @@ public:
else
a.spawn(b);
}
+
+ ~affinity_partition_type() {
+ // The delay_list can be non-empty if an exception is thrown.
+ while( !delay_list.empty() ) {
+ task& t = delay_list.pop_front();
+ t.destroy(t);
+ }
+ }
};
} // namespace internal
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
index 95b164f..b31df8b 100644
--- a/include/tbb/pipeline.h
+++ b/include/tbb/pipeline.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -40,13 +40,9 @@ class filter;
//! @cond INTERNAL
namespace internal {
-const unsigned char IS_SERIAL = 0x1;
-const unsigned char SERIAL_MODE_MASK = 0x1; // the lowest bit 0 is for parallel vs. serial
// The argument for PIPELINE_VERSION should be an integer between 2 and 9
#define __TBB_PIPELINE_VERSION(x) (unsigned char)(x-2)<<1
-const unsigned char VERSION_MASK = 0x7<<1; // bits 1-3 are for version
-const unsigned char CURRENT_VERSION = __TBB_PIPELINE_VERSION(3);
typedef unsigned long Token;
typedef long tokendiff_t;
@@ -58,17 +54,33 @@ class ordered_buffer;
//! A stage in a pipeline.
/** @ingroup algorithms */
-class filter {
+class filter: internal::no_copy {
private:
//! Value used to mark "not in pipeline"
static filter* not_in_pipeline() {return reinterpret_cast<filter*>(internal::intptr(-1));}
-protected:
- //! For pipeline version 2 and earlier 0 is parallel and 1 is serial mode
+
+ //! The lowest bit 0 is for parallel vs. serial
+ static const unsigned char filter_is_serial = 0x1;
+
+ //! 4th bit distinguish ordered vs unordered
+ // The bit was not set for parallel filters in TBB 2.1 and earlier,
+ // but is_ordered() function always treats parallel filters as out of order
+ static const unsigned char filter_is_out_of_order = 0x1<<4;
+
+ static const unsigned char current_version = __TBB_PIPELINE_VERSION(4);
+ static const unsigned char version_mask = 0x7<<1; // bits 1-3 are for version
+public:
enum mode {
- parallel = internal::CURRENT_VERSION,
- serial = internal::CURRENT_VERSION | internal::IS_SERIAL
+ //! processes multiple items in parallel and in no particular order
+ parallel = current_version | filter_is_out_of_order,
+ //! processes items one at a time; all such filters process items in the same order
+ serial_in_order = current_version | filter_is_serial,
+ //! processes items one at a time and in no particular order
+ serial_out_of_order = current_version | filter_is_serial | filter_is_out_of_order,
+ //! @deprecated use serial_in_order instead
+ serial = serial_in_order
};
-
+protected:
filter( bool is_serial_ ) :
next_filter_in_pipeline(not_in_pipeline()),
input_buffer(NULL),
@@ -85,12 +97,16 @@ protected:
my_pipeline(NULL)
{}
-
public:
- //! True if filter must receive stream in order.
+ //! True if filter is serial.
bool is_serial() const {
- return (my_filter_mode & internal::SERIAL_MODE_MASK) == internal::IS_SERIAL;
+ return bool( my_filter_mode & filter_is_serial );
}
+
+ // ! True if filter must receive stream in order.
+ bool is_ordered() const {
+ return (my_filter_mode & (filter_is_out_of_order|filter_is_serial))==filter_is_serial;
+ }
//! Operate on an item from the input stream, and return item for output stream.
/** Returns NULL if filter is a sink. */
@@ -98,7 +114,14 @@ public:
//! Destroy filter.
/** If the filter was added to a pipeline, the pipeline must be destroyed first. */
- virtual ~filter();
+ virtual __TBB_EXPORTED_METHOD ~filter();
+
+#if __TBB_EXCEPTIONS
+ //! Destroys item if pipeline is cancelled
+ /** Required to prevent memory leaks
+ Note it can be called concurrently even for serial filters.*/
+ virtual void finalize( void* /*item*/ ) {};
+#endif
private:
//! Pointer to next filter in the pipeline.
@@ -125,19 +148,25 @@ private:
class pipeline {
public:
//! Construct empty pipeline.
- pipeline();
+ __TBB_EXPORTED_METHOD pipeline();
- //! Destroy pipeline.
- virtual ~pipeline();
+ /** Though the current implementation declares the destructor virtual, do not rely on this
+ detail. The virtualness is deprecated and may disappear in future versions of TBB. */
+ virtual __TBB_EXPORTED_METHOD ~pipeline();
//! Add filter to end of pipeline.
- void add_filter( filter& filter_ );
+ void __TBB_EXPORTED_METHOD add_filter( filter& filter_ );
//! Run the pipeline to completion.
- void run( size_t max_number_of_live_tokens );
+ void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens );
+
+#if __TBB_EXCEPTIONS
+ //! Run the pipeline to completion with user-supplied context
+ void __TBB_EXPORTED_METHOD run( size_t max_number_of_live_tokens, tbb::task_group_context& context );
+#endif
//! Remove all filters from the pipeline
- void clear();
+ void __TBB_EXPORTED_METHOD clear();
private:
friend class internal::stage_task;
@@ -165,7 +194,12 @@ private:
void remove_filter( filter& filter_ );
//! Not used, but retained to satisfy old export files.
- void inject_token( task& self );
+ void __TBB_EXPORTED_METHOD inject_token( task& self );
+
+#if __TBB_EXCEPTIONS
+ //! Does clean up if pipeline is cancelled or exception occured
+ void clear_filters();
+#endif
};
} // tbb
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
index d55706e..a7cb71c 100644
--- a/include/tbb/queuing_mutex.h
+++ b/include/tbb/queuing_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,6 +31,7 @@
#include <cstring>
#include "atomic.h"
+#include "tbb_profiling.h"
namespace tbb {
@@ -41,18 +42,21 @@ public:
//! Construct unacquired mutex.
queuing_mutex() {
q_tail = NULL;
- };
+#if TBB_USE_THREADING_TOOLS
+ internal_construct();
+#endif
+ }
//! The scoped locking pattern
/** It helps to avoid the common problem of forgetting to release lock.
It also nicely provides the "node" for queuing locks. */
- class scoped_lock : private internal:: no_copy {
+ class scoped_lock: internal::no_copy {
//! Initialize fields to mean "no lock held".
void initialize() {
mutex = NULL;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal::poison_pointer(next);
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
public:
//! Construct lock that has not acquired a mutex.
@@ -72,13 +76,13 @@ public:
}
//! Acquire lock on given mutex.
- void acquire( queuing_mutex& m );
+ void __TBB_EXPORTED_METHOD acquire( queuing_mutex& m );
//! Acquire lock on given mutex if free (i.e. non-blocking)
- bool try_acquire( queuing_mutex& m );
+ bool __TBB_EXPORTED_METHOD try_acquire( queuing_mutex& m );
//! Release lock.
- void release();
+ void __TBB_EXPORTED_METHOD release();
private:
//! The pointer to the mutex owned, or NULL if not holding a mutex.
@@ -94,6 +98,8 @@ public:
internal::uintptr going;
};
+ void __TBB_EXPORTED_METHOD internal_construct();
+
// Mutex traits
static const bool is_rw_mutex = false;
static const bool is_recursive_mutex = false;
@@ -106,6 +112,8 @@ private:
};
+__TBB_DEFINE_PROFILING_SET_NAME(queuing_mutex)
+
} // namespace tbb
#endif /* __TBB_queuing_mutex_H */
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
index 0d568d2..27456f6 100644
--- a/include/tbb/queuing_rw_mutex.h
+++ b/include/tbb/queuing_rw_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,6 +31,7 @@
#include <cstring>
#include "atomic.h"
+#include "tbb_profiling.h"
namespace tbb {
@@ -43,14 +44,17 @@ public:
//! Construct unacquired mutex.
queuing_rw_mutex() {
q_tail = NULL;
- };
+#if TBB_USE_THREADING_TOOLS
+ internal_construct();
+#endif
+ }
//! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL
~queuing_rw_mutex() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
__TBB_ASSERT( !q_tail, "destruction of an acquired mutex");
#endif
- };
+ }
class scoped_lock;
friend class scoped_lock;
@@ -58,33 +62,15 @@ public:
//! The scoped locking pattern
/** It helps to avoid the common problem of forgetting to release lock.
It also nicely provides the "node" for queuing locks. */
- class scoped_lock : private internal::no_copy {
- /** Request type constants for scoped_lock::state */
- enum state_t {
- STATE_NONE = 0,
- STATE_WRITER = 1,
- STATE_READER = 1<<1,
- STATE_READER_UNBLOCKNEXT = 1<<2,
- STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
- STATE_ACTIVEREADER = 1<<3,
- STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
- STATE_UPGRADE_REQUESTED = 1<<4,
- STATE_UPGRADE_WAITING = 1<<5,
- STATE_UPGRADE_LOSER = 1<<6,
- STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
-#if TBB_DO_ASSERT
- ,STATE_INVALID
-#endif /* TBB_DO_ASSERT */
- };
-
+ class scoped_lock: internal::no_copy {
//! Initialize fields
void initialize() {
mutex = NULL;
-#if TBB_DO_ASSERT
- state = STATE_INVALID;
+#if TBB_USE_ASSERT
+ state = 0xFF; // Set to invalid state
internal::poison_pointer(next);
internal::poison_pointer(prev);
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
public:
//! Construct lock that has not acquired a mutex.
@@ -126,8 +112,10 @@ public:
//! The pointer to the previous and next competitors for a mutex
scoped_lock * prev, * next;
+ typedef unsigned char state_t;
+
//! State of the request: reader, writer, active reader, other service states
- atomic<unsigned char> state;
+ atomic<state_t> state;
//! The local spin-wait variable
/** Corresponds to "spin" in the pseudocode but inverted for the sake of zero-initialization */
@@ -153,6 +141,8 @@ public:
void unblock_or_wait_on_internal_lock( uintptr_t );
};
+ void __TBB_EXPORTED_METHOD internal_construct();
+
// Mutex traits
static const bool is_rw_mutex = true;
static const bool is_recursive_mutex = false;
@@ -164,6 +154,8 @@ private:
};
+__TBB_DEFINE_PROFILING_SET_NAME(queuing_rw_mutex)
+
} // namespace tbb
#endif /* __TBB_queuing_rw_mutex_H */
diff --git a/include/tbb/recursive_mutex.h b/include/tbb/recursive_mutex.h
index d2be281..886a319 100644
--- a/include/tbb/recursive_mutex.h
+++ b/include/tbb/recursive_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -48,8 +48,8 @@ namespace tbb { namespace internal {
#endif /* _WIN32||_WIN64 */
-#include <stdio.h>
#include "tbb_stddef.h"
+#include "tbb_profiling.h"
namespace tbb {
//! Mutex that allows recursive mutex acquisition.
@@ -59,7 +59,7 @@ class recursive_mutex {
public:
//! Construct unacquired recursive_mutex.
recursive_mutex() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT || TBB_USE_THREADING_TOOLS
internal_construct();
#else
#if _WIN32||_WIN64
@@ -77,11 +77,11 @@ public:
pthread_mutexattr_destroy( &mtx_attr );
#endif /* _WIN32||_WIN64*/
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
};
~recursive_mutex() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_destroy();
#else
#if _WIN32||_WIN64
@@ -90,7 +90,7 @@ public:
pthread_mutex_destroy(&impl);
#endif /* _WIN32||_WIN64 */
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
};
class scoped_lock;
@@ -99,7 +99,7 @@ public:
//! The scoped locking pattern
/** It helps to avoid the common problem of forgetting to release lock.
It also nicely provides the "node" for queuing locks. */
- class scoped_lock : private internal::no_copy {
+ class scoped_lock: internal::no_copy {
public:
//! Construct lock that has not acquired a recursive_mutex.
scoped_lock() : my_mutex(NULL) {};
@@ -118,7 +118,7 @@ public:
//! Acquire lock on given mutex.
void acquire( recursive_mutex& mutex ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_acquire( mutex );
#else
my_mutex = &mutex;
@@ -127,12 +127,12 @@ public:
#else
pthread_mutex_lock( &mutex.impl );
#endif /* _WIN32||_WIN64 */
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
//! Try acquire lock on given recursive_mutex.
bool try_acquire( recursive_mutex& mutex ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
return internal_try_acquire( mutex );
#else
bool result;
@@ -145,12 +145,12 @@ public:
my_mutex = &mutex;
return result;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
//! Release lock
void release() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal_release ();
#else
#if _WIN32||_WIN64
@@ -159,7 +159,7 @@ public:
pthread_mutex_unlock(&my_mutex->impl);
#endif /* _WIN32||_WIN64 */
my_mutex = NULL;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
private:
@@ -167,13 +167,13 @@ public:
recursive_mutex* my_mutex;
//! All checks from acquire using mutex.state were moved here
- void internal_acquire( recursive_mutex& m );
+ void __TBB_EXPORTED_METHOD internal_acquire( recursive_mutex& m );
//! All checks from try_acquire using mutex.state were moved here
- bool internal_try_acquire( recursive_mutex& m );
+ bool __TBB_EXPORTED_METHOD internal_try_acquire( recursive_mutex& m );
//! All checks from release using mutex.state were moved here
- void internal_release();
+ void __TBB_EXPORTED_METHOD internal_release();
};
// Mutex traits
@@ -193,12 +193,14 @@ private:
#endif /* _WIN32||_WIN64 */
//! All checks from mutex constructor using mutex.state were moved here
- void internal_construct();
+ void __TBB_EXPORTED_METHOD internal_construct();
//! All checks from mutex destructor using mutex.state were moved here
- void internal_destroy();
+ void __TBB_EXPORTED_METHOD internal_destroy();
};
+__TBB_DEFINE_PROFILING_SET_NAME(recursive_mutex)
+
} // namespace tbb
#endif /* __TBB_recursive_mutex_H */
diff --git a/include/tbb/scalable_allocator.h b/include/tbb/scalable_allocator.h
index bac9f7e..ef4bd48 100644
--- a/include/tbb/scalable_allocator.h
+++ b/include/tbb/scalable_allocator.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,39 +28,73 @@
#ifndef __TBB_scalable_allocator_H
#define __TBB_scalable_allocator_H
+/** @file */
-#include <stddef.h> // Need ptrdiff_t and size_t from here.
+#include <stddef.h> /* Need ptrdiff_t and size_t from here. */
+
+#if !defined(__cplusplus) && __ICC==1100
+ #pragma warning (push)
+ #pragma warning (disable: 991)
+#endif
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-//! The "malloc" analogue to allocate block of memory of size bytes.
-/** @ingroup memory_allocation */
-void * scalable_malloc (size_t size);
+#if _MSC_VER >= 1400
+#define __TBB_EXPORTED_FUNC __cdecl
+#else
+#define __TBB_EXPORTED_FUNC
+#endif
-//! The "free" analogue to discard a previously allocated piece of memory
-/** @ingroup memory_allocation */
-void scalable_free (void* ptr);
+/** The "malloc" analogue to allocate block of memory of size bytes.
+ * @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_malloc (size_t size);
-//! The "realloc" analogue complementing scalable_malloc
-/** @ingroup memory_allocation */
-void * scalable_realloc (void* ptr, size_t size);
+/** The "free" analogue to discard a previously allocated piece of memory.
+ @ingroup memory_allocation */
+void __TBB_EXPORTED_FUNC scalable_free (void* ptr);
-//! The "calloc" analogue complementing scalable_malloc
-/** @ingroup memory_allocation */
-void * scalable_calloc (size_t nobj, size_t size);
+/** The "realloc" analogue complementing scalable_malloc.
+ @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_realloc (void* ptr, size_t size);
+
+/** The "calloc" analogue complementing scalable_malloc.
+ @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_calloc (size_t nobj, size_t size);
+
+/** The "posix_memalign" analogue.
+ @ingroup memory_allocation */
+int __TBB_EXPORTED_FUNC scalable_posix_memalign (void** memptr, size_t alignment, size_t size);
+
+/** The "_aligned_malloc" analogue.
+ @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_aligned_malloc (size_t size, size_t alignment);
+
+/** The "_aligned_realloc" analogue.
+ @ingroup memory_allocation */
+void * __TBB_EXPORTED_FUNC scalable_aligned_realloc (void* ptr, size_t size, size_t alignment);
+
+/** The "_aligned_free" analogue.
+ @ingroup memory_allocation */
+void __TBB_EXPORTED_FUNC scalable_aligned_free (void* ptr);
#ifdef __cplusplus
-} // extern "C"
+} /* extern "C" */
#endif /* __cplusplus */
#ifdef __cplusplus
-#include <new> // To use new with the placement argument
+#include <new> /* To use new with the placement argument */
namespace tbb {
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+ #pragma warning (push)
+ #pragma warning (disable: 4100)
+#endif
+
//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
/** The members are ordered the same way they are in section 20.4.1
of the ISO C++ standard.
@@ -86,12 +120,12 @@ public:
pointer address(reference x) const {return &x;}
const_pointer address(const_reference x) const {return &x;}
- //! Allocate space for n objects, starting on a cache/sector line.
+ //! Allocate space for n objects.
pointer allocate( size_type n, const void* /*hint*/ =0 ) {
return static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );
}
- //! Free block of memory that starts on a cache line
+ //! Free previously allocated block of memory
void deallocate( pointer p, size_type ) {
scalable_free( p );
}
@@ -102,9 +136,13 @@ public:
return (absolutemax > 0 ? absolutemax : 1);
}
void construct( pointer p, const T& val ) { new(static_cast<void*>(p)) T(val); }
- void destroy( pointer p ) {(static_cast<T*>(p))->~T();}
+ void destroy( pointer p ) {p->~T();}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif // warning 4100 is back
+
//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
/** @ingroup memory_allocation */
template<>
@@ -142,4 +180,8 @@ inline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U
#endif /* __cplusplus */
+#if !defined(__cplusplus) && __ICC==1100
+ #pragma warning (pop)
+#endif // ICC 11.0 warning 991 is back
+
#endif /* __TBB_scalable_allocator_H */
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
index b24ed94..8e73c13 100644
--- a/include/tbb/spin_mutex.h
+++ b/include/tbb/spin_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,7 +31,8 @@
#include <cstddef>
#include "tbb_stddef.h"
-#include "tbb/tbb_machine.h"
+#include "tbb_machine.h"
+#include "tbb_profiling.h"
namespace tbb {
@@ -48,10 +49,14 @@ class spin_mutex {
public:
//! Construct unacquired lock.
/** Equivalent to zero-initialization of *this. */
- spin_mutex() : flag(0) {}
+ spin_mutex() : flag(0) {
+#if TBB_USE_THREADING_TOOLS
+ internal_construct();
+#endif
+ }
//! Represents acquisition of a mutex.
- class scoped_lock : private internal::no_copy {
+ class scoped_lock : internal::no_copy {
private:
//! Points to currently held mutex, or NULL if no lock is held.
spin_mutex* my_mutex;
@@ -60,42 +65,42 @@ public:
internal::uintptr my_unlock_value;
//! Like acquire, but with ITT instrumentation.
- void internal_acquire( spin_mutex& m );
+ void __TBB_EXPORTED_METHOD internal_acquire( spin_mutex& m );
//! Like try_acquire, but with ITT instrumentation.
- bool internal_try_acquire( spin_mutex& m );
+ bool __TBB_EXPORTED_METHOD internal_try_acquire( spin_mutex& m );
//! Like release, but with ITT instrumentation.
- void internal_release();
+ void __TBB_EXPORTED_METHOD internal_release();
public:
- //! Construct without without acquiring a mutex.
+ //! Construct without acquiring a mutex.
scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}
//! Construct and acquire lock on a mutex.
scoped_lock( spin_mutex& m ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
my_mutex=NULL;
internal_acquire(m);
#else
my_unlock_value = __TBB_LockByte(m.flag);
my_mutex=&m;
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
}
//! Acquire lock.
void acquire( spin_mutex& m ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
internal_acquire(m);
#else
my_unlock_value = __TBB_LockByte(m.flag);
my_mutex = &m;
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
}
//! Try acquiring lock (non-blocking)
bool try_acquire( spin_mutex& m ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
return internal_try_acquire(m);
#else
bool result = __TBB_TryLockByte(m.flag);
@@ -104,31 +109,33 @@ public:
my_mutex = &m;
}
return result;
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT*/
}
//! Release lock
void release() {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
internal_release();
#else
__TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
my_mutex = NULL;
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
}
//! Destroy lock. If holding a lock, releases the lock first.
~scoped_lock() {
if( my_mutex ) {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
internal_release();
#else
__TBB_store_with_release(my_mutex->flag, static_cast<unsigned char>(my_unlock_value));
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
}
}
};
+ void __TBB_EXPORTED_METHOD internal_construct();
+
// Mutex traits
static const bool is_rw_mutex = false;
static const bool is_recursive_mutex = false;
@@ -137,6 +144,8 @@ public:
friend class scoped_lock;
};
+__TBB_DEFINE_PROFILING_SET_NAME(spin_mutex)
+
} // namespace tbb
#endif /* __TBB_spin_mutex_H */
diff --git a/include/tbb/spin_rw_mutex.h b/include/tbb/spin_rw_mutex.h
index 92a9bc1..de6cacd 100644
--- a/include/tbb/spin_rw_mutex.h
+++ b/include/tbb/spin_rw_mutex.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,6 +31,7 @@
#include "tbb_stddef.h"
#include "tbb_machine.h"
+#include "tbb_profiling.h"
namespace tbb {
@@ -43,47 +44,51 @@ class spin_rw_mutex_v3 {
//! @cond INTERNAL
//! Internal acquire write lock.
- bool internal_acquire_writer();
+ bool __TBB_EXPORTED_METHOD internal_acquire_writer();
//! Out of line code for releasing a write lock.
/** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
- void internal_release_writer();
+ void __TBB_EXPORTED_METHOD internal_release_writer();
//! Internal acquire read lock.
- void internal_acquire_reader();
+ void __TBB_EXPORTED_METHOD internal_acquire_reader();
//! Internal upgrade reader to become a writer.
- bool internal_upgrade();
+ bool __TBB_EXPORTED_METHOD internal_upgrade();
//! Out of line code for downgrading a writer to a reader.
/** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
- void internal_downgrade();
+ void __TBB_EXPORTED_METHOD internal_downgrade();
//! Internal release read lock.
- void internal_release_reader();
+ void __TBB_EXPORTED_METHOD internal_release_reader();
//! Internal try_acquire write lock.
- bool internal_try_acquire_writer();
+ bool __TBB_EXPORTED_METHOD internal_try_acquire_writer();
//! Internal try_acquire read lock.
- bool internal_try_acquire_reader();
+ bool __TBB_EXPORTED_METHOD internal_try_acquire_reader();
//! @endcond
public:
//! Construct unacquired mutex.
- spin_rw_mutex_v3() : state(0) {}
+ spin_rw_mutex_v3() : state(0) {
+#if TBB_USE_THREADING_TOOLS
+ internal_construct();
+#endif
+ }
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
//! Destructor asserts if the mutex is acquired, i.e. state is zero.
~spin_rw_mutex_v3() {
__TBB_ASSERT( !state, "destruction of an acquired mutex");
};
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
//! The scoped locking pattern
/** It helps to avoid the common problem of forgetting to release lock.
It also nicely provides the "node" for queuing locks. */
- class scoped_lock : private internal::no_copy {
+ class scoped_lock : internal::no_copy {
public:
//! Construct lock that has not acquired a mutex.
/** Equivalent to zero-initialization of *this. */
@@ -123,24 +128,24 @@ public:
__TBB_ASSERT( mutex, "lock is not acquired" );
spin_rw_mutex *m = mutex;
mutex = NULL;
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
if( is_writer ) m->internal_release_writer();
else m->internal_release_reader();
#else
if( is_writer ) __TBB_AtomicAND( &m->state, READERS );
else __TBB_FetchAndAddWrelease( &m->state, -(intptr_t)ONE_READER);
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
}
//! Downgrade writer to become a reader.
bool downgrade_to_reader() {
-#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
__TBB_ASSERT( mutex, "lock is not acquired" );
__TBB_ASSERT( is_writer, "not a writer" );
mutex->internal_downgrade();
#else
__TBB_FetchAndAddW( &mutex->state, ((intptr_t)ONE_READER-WRITER));
-#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
is_writer = false;
return true;
@@ -184,8 +189,12 @@ private:
Bit 1 = request by a writer to acquire lock (hint to readers to wait)
Bit 2..N = number of readers holding lock */
state_t state;
+
+ void __TBB_EXPORTED_METHOD internal_construct();
};
-} // namespace ThreadingBuildingBlocks
+__TBB_DEFINE_PROFILING_SET_NAME(spin_rw_mutex)
+
+} // namespace tbb
#endif /* __TBB_spin_rw_mutex_H */
diff --git a/include/tbb/task.h b/include/tbb/task.h
index 881c484..50e7cf0 100644
--- a/include/tbb/task.h
+++ b/include/tbb/task.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,7 +32,7 @@
#include "tbb_stddef.h"
#if __TBB_EXCEPTIONS
-#include "tbb/cache_aligned_allocator.h"
+#include "cache_aligned_allocator.h"
#endif /* __TBB_EXCEPTIONS */
namespace tbb {
@@ -47,7 +47,7 @@ class tbb_exception;
//! @cond INTERNAL
namespace internal {
- class scheduler {
+ class scheduler: no_copy {
public:
//! For internal use only
virtual void spawn( task& first, task*& next ) = 0;
@@ -76,40 +76,40 @@ namespace internal {
*my_next;
};
- class allocate_root_with_context_proxy {
+ class allocate_root_with_context_proxy: no_assign {
task_group_context& my_context;
public:
allocate_root_with_context_proxy ( task_group_context& ctx ) : my_context(ctx) {}
- task& allocate( size_t size ) const;
- void free( task& ) const;
+ task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+ void __TBB_EXPORTED_METHOD free( task& ) const;
};
#endif /* __TBB_EXCEPTIONS */
- class allocate_root_proxy {
+ class allocate_root_proxy: no_assign {
public:
- static task& allocate( size_t size );
- static void free( task& );
+ static task& __TBB_EXPORTED_FUNC allocate( size_t size );
+ static void __TBB_EXPORTED_FUNC free( task& );
};
- class allocate_continuation_proxy {
+ class allocate_continuation_proxy: no_assign {
public:
- task& allocate( size_t size ) const;
- void free( task& ) const;
+ task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+ void __TBB_EXPORTED_METHOD free( task& ) const;
};
- class allocate_child_proxy {
+ class allocate_child_proxy: no_assign {
public:
- task& allocate( size_t size ) const;
- void free( task& ) const;
+ task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+ void __TBB_EXPORTED_METHOD free( task& ) const;
};
- class allocate_additional_child_of_proxy {
+ class allocate_additional_child_of_proxy: no_assign {
task& self;
task& parent;
public:
allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
- task& allocate( size_t size ) const;
- void free( task& ) const;
+ task& __TBB_EXPORTED_METHOD allocate( size_t size ) const;
+ void __TBB_EXPORTED_METHOD free( task& ) const;
};
//! Memory prefix to a task object.
@@ -136,7 +136,7 @@ namespace internal {
task_group_context *context;
#endif /* __TBB_EXCEPTIONS */
- //! The scheduler that allocated the task, or NULL if task is big.
+ //! The scheduler that allocated the task, or NULL if the task is big.
/** Small tasks are pooled by the scheduler that allocated the task.
If a scheduler needs to free a small task allocated by another scheduler,
it returns the task to that other scheduler. This policy avoids
@@ -144,10 +144,10 @@ namespace internal {
thread-specific pools. */
scheduler* origin;
- //! scheduler that owns the task.
+ //! The scheduler that owns the task.
scheduler* owner;
- //! task whose reference count includes me.
+ //! The task whose reference count includes me.
/** In the "blocking style" of programming, this field points to the parent task.
In the "continuation-passing style" of programming, this field points to the
continuation of the parent. */
@@ -179,7 +179,7 @@ namespace internal {
//! "next" field for list of task
tbb::task* next;
- //! task corresponding to this task_prefix.
+ //! The task corresponding to this task_prefix.
tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}
};
@@ -284,7 +284,7 @@ public:
init();
}
- ~task_group_context ();
+ __TBB_EXPORTED_METHOD ~task_group_context ();
//! Forcefully reinitializes context object after an algorithm it was used with finished.
/** Because the method assumes that the all the tasks that used to be associated with
@@ -294,7 +294,7 @@ public:
IMPORTANT: It is assumed that this method is not used concurrently!
The method does not change the context's parent if it is set. **/
- void reset ();
+ void __TBB_EXPORTED_METHOD reset ();
//! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
/** \return false if cancellation has already been requested, true otherwise.
@@ -304,15 +304,15 @@ public:
context or to one of its ancestors (if this context is bound). It is guaranteed
that when this method is called on the same context, true may be returned by
at most one invocation. **/
- bool cancel_group_execution ();
+ bool __TBB_EXPORTED_METHOD cancel_group_execution ();
//! Returns true if the context received cancellation request.
- bool is_group_execution_cancelled () const;
+ bool __TBB_EXPORTED_METHOD is_group_execution_cancelled () const;
protected:
//! Out-of-line part of the constructor.
/** Separated to facilitate future support for backward binary compatibility. **/
- void init ();
+ void __TBB_EXPORTED_METHOD init ();
private:
friend class task;
@@ -332,7 +332,7 @@ private:
/** @ingroup task_scheduling */
class task: internal::no_copy {
//! Set reference count
- void internal_set_ref_count( int count );
+ void __TBB_EXPORTED_METHOD internal_set_ref_count( int count );
protected:
//! Default constructor.
@@ -400,7 +400,7 @@ public:
implicitly deleted after its execute() method runs. However,
sometimes a task needs to be explicitly deallocated, such as
when a root task is used as the parent in spawn_and_wait_for_all. */
- void destroy( task& victim );
+ void __TBB_EXPORTED_METHOD destroy( task& victim );
//------------------------------------------------------------------------
// Recycling of tasks
@@ -479,11 +479,11 @@ public:
//! Set reference count
void set_ref_count( int count ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
internal_set_ref_count(count);
#else
prefix().ref_count = count;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
}
//! Schedule task for execution when a worker becomes available.
@@ -507,7 +507,7 @@ public:
}
//! Similar to spawn followed by wait_for_all, but more efficient.
- void spawn_and_wait_for_all( task_list& list );
+ void __TBB_EXPORTED_METHOD spawn_and_wait_for_all( task_list& list );
//! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.
/** The thread that calls spawn_root_and_wait must be the same thread
@@ -529,8 +529,8 @@ public:
prefix().owner->wait_for_all( *this, NULL );
}
- //! The task() currently being run by this thread.
- static task& self();
+ //! The innermost task being executed or destroyed by the current thread at the moment.
+ static task& __TBB_EXPORTED_FUNC self();
//! task on whose behalf this task is working, or NULL if this is a root.
task* parent() const {return prefix().parent;}
@@ -551,7 +551,7 @@ public:
//! The internal reference count.
int ref_count() const {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
internal::reference_count ref_count = prefix().ref_count;
__TBB_ASSERT( ref_count==int(ref_count), "integer overflow error");
#endif
@@ -559,7 +559,7 @@ public:
}
//! True if this task is owned by the calling thread; false otherwise.
- bool is_owned_by_current_thread() const;
+ bool __TBB_EXPORTED_METHOD is_owned_by_current_thread() const;
//------------------------------------------------------------------------
// Affinity
@@ -580,7 +580,7 @@ public:
affinity but will be executed on another thread.
The default action does nothing. */
- virtual void note_affinity( affinity_id id );
+ virtual void __TBB_EXPORTED_METHOD note_affinity( affinity_id id );
#if __TBB_EXCEPTIONS
//! Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
@@ -676,12 +676,12 @@ inline void task::spawn_root_and_wait( task_list& root_list ) {
} // namespace tbb
-inline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& p ) {
- return &p.allocate(bytes);
+inline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& ) {
+ return &tbb::internal::allocate_root_proxy::allocate(bytes);
}
-inline void operator delete( void* task, const tbb::internal::allocate_root_proxy& p ) {
- p.free( *static_cast<tbb::task*>(task) );
+inline void operator delete( void* task, const tbb::internal::allocate_root_proxy& ) {
+ tbb::internal::allocate_root_proxy::free( *static_cast<tbb::task*>(task) );
}
#if __TBB_EXCEPTIONS
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
index 9957dc7..f817ccc 100644
--- a/include/tbb/task_scheduler_init.h
+++ b/include/tbb/task_scheduler_init.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -51,7 +51,7 @@ class task_scheduler_init: internal::no_copy {
/** NULL if not currently initialized. */
internal::scheduler* my_scheduler;
public:
-
+
//! Typedef for number of threads that is automatic.
static const int automatic = -1;
@@ -67,20 +67,20 @@ public:
The number_of_threads is ignored if any other task_scheduler_inits
currently exist. A thread may construct multiple task_scheduler_inits.
Doing so does no harm because the underlying scheduler is reference counted. */
- void initialize( int number_of_threads=automatic );
+ void __TBB_EXPORTED_METHOD initialize( int number_of_threads=automatic );
//! The overloaded method with stack size parameter
/** Overloading is necessary to preserve ABI compatibility */
- void initialize( int number_of_threads, stack_size_type thread_stack_size );
+ void __TBB_EXPORTED_METHOD initialize( int number_of_threads, stack_size_type thread_stack_size );
//! Inverse of method initialize.
- void terminate();
+ void __TBB_EXPORTED_METHOD terminate();
//! Shorthand for default constructor followed by call to intialize(number_of_threads).
task_scheduler_init( int number_of_threads=automatic, stack_size_type thread_stack_size=0 ) : my_scheduler(NULL) {
initialize( number_of_threads, thread_stack_size );
}
-
+
//! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.
~task_scheduler_init() {
if( my_scheduler )
@@ -95,7 +95,10 @@ public:
to boost the number of threads in the tbb's internal pool, if your tasks are
doing I/O operations. The optimal number of additional threads depends on how
much time your tasks spend in the blocked state. */
- static int default_num_threads ();
+ static int __TBB_EXPORTED_FUNC default_num_threads ();
+
+ //! Returns true if scheduler is active (initialized); false otherwise
+ bool is_active() const { return my_scheduler != NULL; }
};
} // namespace tbb
diff --git a/include/tbb/task_scheduler_observer.h b/include/tbb/task_scheduler_observer.h
index 3e30e6b..ee8bd5d 100644
--- a/include/tbb/task_scheduler_observer.h
+++ b/include/tbb/task_scheduler_observer.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -45,7 +45,7 @@ class task_scheduler_observer_v3 {
atomic<intptr> my_busy_count;
public:
//! Enable or disable observation
- void observe( bool state=true );
+ void __TBB_EXPORTED_METHOD observe( bool state=true );
//! True if observation is enables; false otherwise.
bool is_observing() const {return my_proxy!=NULL;}
@@ -54,10 +54,10 @@ public:
task_scheduler_observer_v3() : my_proxy(NULL) {my_busy_count=0;}
//! Called by thread before first steal since observation became enabled
- virtual void on_scheduler_entry( bool is_worker ) {}
+ virtual void on_scheduler_entry( bool /*is_worker*/ ) {}
//! Called by thread when it no longer takes part in task stealing.
- virtual void on_scheduler_exit( bool is_worker ) {}
+ virtual void on_scheduler_exit( bool /*is_worker*/ ) {}
//! Destructor
virtual ~task_scheduler_observer_v3() {observe(false);}
diff --git a/include/tbb/tbb_allocator.h b/include/tbb/tbb_allocator.h
index b819a3f..703d481 100644
--- a/include/tbb/tbb_allocator.h
+++ b/include/tbb/tbb_allocator.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -39,17 +39,23 @@ namespace internal {
//! Deallocates memory using FreeHandler
/** The function uses scalable_free if scalable allocator is available and free if not*/
- void deallocate_via_handler_v3( void *p );
+ void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p );
//! Allocates memory using MallocHandler
/** The function uses scalable_malloc if scalable allocator is available and malloc if not*/
- void* allocate_via_handler_v3( size_t n );
+ void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n );
//! Returns true if standard malloc/free are used to work with memory.
- bool is_malloc_used_v3();
+ bool __TBB_EXPORTED_FUNC is_malloc_used_v3();
}
//! @endcond
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Workaround for erroneous "unreferenced parameter" warning in method destroy.
+ #pragma warning (push)
+ #pragma warning (disable: 4100)
+#endif
+
//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
/** The class selects the best memory allocation mechanism available
from scalable_malloc and standard malloc.
@@ -76,15 +82,6 @@ public:
standard
};
-#if _WIN64
- //! Non-ISO method required by Microsoft's STL containers
- /** Some versions of Microsoft's container classes seem to require that
- allocators supply this method. */
- char* _Charalloc( size_type size ) {
- return (char*)(internal::allocate_via_handler_v3( size * sizeof(T)));
- }
-#endif /* _WIN64 */
-
tbb_allocator() throw() {}
tbb_allocator( const tbb_allocator& ) throw() {}
template<typename U> tbb_allocator(const tbb_allocator<U>&) throw() {}
@@ -92,12 +89,12 @@ public:
pointer address(reference x) const {return &x;}
const_pointer address(const_reference x) const {return &x;}
- //! Allocate space for n objects, starting on a cache/sector line.
+ //! Allocate space for n objects.
pointer allocate( size_type n, const void* /*hint*/ = 0) {
return pointer(internal::allocate_via_handler_v3( n * sizeof(T) ));
}
- //! Free block of memory that starts on a cache line
+ //! Free previously allocated block of memory.
void deallocate( pointer p, size_type ) {
internal::deallocate_via_handler_v3(p);
}
@@ -120,6 +117,10 @@ public:
}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif // warning 4100 is back
+
//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
/** @ingroup memory_allocation */
template<>
@@ -139,6 +140,6 @@ inline bool operator==( const tbb_allocator<T>&, const tbb_allocator<U>& ) {retu
template<typename T, typename U>
inline bool operator!=( const tbb_allocator<T>&, const tbb_allocator<U>& ) {return false;}
-} // namespace ThreadBuildingBlocks
+} // namespace tbb
#endif /* __TBB_tbb_allocator_H */
diff --git a/include/tbb/tbb_exception.h b/include/tbb/tbb_exception.h
index 48358f0..5c1f5e7 100644
--- a/include/tbb/tbb_exception.h
+++ b/include/tbb/tbb_exception.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -44,7 +44,7 @@ public:
} // namespace tbb
#if __TBB_EXCEPTIONS
-#include "tbb/tbb_allocator.h"
+#include "tbb_allocator.h"
#include <exception>
#include <typeinfo>
#include <new>
@@ -117,7 +117,7 @@ public:
set(name, info);
}
- ~captured_exception () throw() {
+ __TBB_EXPORTED_METHOD ~captured_exception () throw() {
clear();
}
@@ -139,10 +139,10 @@ public:
void throw_self () { throw *this; }
/*override*/
- const char* name() const throw();
+ const char* __TBB_EXPORTED_METHOD name() const throw();
/*override*/
- const char* what() const throw();
+ const char* __TBB_EXPORTED_METHOD what() const throw();
private:
//! Used only by method clone().
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
index e6456a4..a0ef58c 100644
--- a/include/tbb/tbb_machine.h
+++ b/include/tbb/tbb_machine.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,7 +29,7 @@
#ifndef __TBB_machine_H
#define __TBB_machine_H
-#include "tbb/tbb_stddef.h"
+#include "tbb_stddef.h"
#if _WIN32||_WIN64
@@ -38,9 +38,9 @@
#endif
#if defined(_M_IX86)
-#include "tbb/machine/windows_ia32.h"
+#include "machine/windows_ia32.h"
#elif defined(_M_AMD64)
-#include "tbb/machine/windows_em64t.h"
+#include "machine/windows_em64t.h"
#else
#error Unsupported platform
#endif
@@ -52,35 +52,35 @@
#elif __linux__ || __FreeBSD__
#if __i386__
-#include "tbb/machine/linux_ia32.h"
+#include "machine/linux_ia32.h"
#elif __x86_64__
-#include "tbb/machine/linux_em64t.h"
+#include "machine/linux_em64t.h"
#elif __ia64__
-#include "tbb/machine/linux_itanium.h"
+#include "machine/linux_itanium.h"
#endif
#elif __APPLE__
#if __i386__
-#include "tbb/machine/linux_ia32.h"
+#include "machine/linux_ia32.h"
#elif __x86_64__
-#include "tbb/machine/linux_em64t.h"
+#include "machine/linux_em64t.h"
#elif __POWERPC__
-#include "tbb/machine/mac_ppc.h"
+#include "machine/mac_ppc.h"
#endif
#elif _AIX
-#include "tbb/machine/ibm_aix51.h"
+#include "machine/ibm_aix51.h"
#elif __sun || __SUNPRO_CC
#define __asm__ asm
#define __volatile__ volatile
#if __i386 || __i386__
-#include "tbb/machine/linux_ia32.h"
+#include "machine/linux_ia32.h"
#elif __x86_64__
-#include "tbb/machine/linux_em64t.h"
+#include "machine/linux_em64t.h"
#endif
#endif
@@ -108,7 +108,7 @@
#ifdef __TBB_fence_for_release
__TBB_fence_for_release();
#endif /* __TBB_fence_for_release */
- location = value;
+ location = T(value);
}
#endif
@@ -161,28 +161,33 @@ public:
}
};
+// T should be unsigned, otherwise sign propagation will break correctness of bit manipulations.
+// S should be either 1 or 2, for the mask calculation to work correctly.
+// Together, these rules limit applicability of Masked CAS to unsigned char and unsigned short.
template<size_t S, typename T>
-inline intptr_t __TBB_MaskedCompareAndSwap (volatile int32_t *ptr, T value, T comparand ) {
- T *base = (T *)( (uintptr_t)(ptr) & ~(uintptr_t)(0x3) );
+inline T __TBB_MaskedCompareAndSwap (volatile T *ptr, T value, T comparand ) {
+ volatile uint32_t * base = (uint32_t*)( (uintptr_t)ptr & ~(uintptr_t)0x3 );
#if __TBB_BIG_ENDIAN
- const uint8_t bitoffset = ( (4-S) - ( (uint8_t *)ptr - (uint8_t *)base) ) * 8;
+ const uint8_t bitoffset = uint8_t( 8*( 4-S - (uintptr_t(ptr) & 0x3) ) );
#else
- const uint8_t bitoffset = ( (uint8_t *)ptr - (uint8_t *)base ) * 8;
+ const uint8_t bitoffset = uint8_t( 8*((uintptr_t)ptr & 0x3) );
#endif
- const uint32_t mask = ( (1<<(S*8) ) - 1)<<bitoffset;
+ const uint32_t mask = ( (1<<(S*8)) - 1 )<<bitoffset;
AtomicBackoff b;
uint32_t result;
for(;;) {
- result = *(volatile uint32_t *)base;
+ result = *base; // reload the base value which might change during the pause
uint32_t old_value = ( result & ~mask ) | ( comparand << bitoffset );
uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
// __TBB_CompareAndSwap4 presumed to have full fence.
- uint32_t tmp = __TBB_CompareAndSwap4( base, new_value, old_value );
- if( tmp==old_value || ((tmp^old_value)&mask)!=0 )
+ result = __TBB_CompareAndSwap4( base, new_value, old_value );
+ if( result==old_value // CAS succeeded
+ || ((result^old_value)&mask)!=0 ) // CAS failed and the bits of interest have changed
break;
- b.pause();
+ else // CAS failed but the bits of interest left unchanged
+ b.pause();
}
- return (T)((result & mask) >> bitoffset);
+ return T((result & mask) >> bitoffset);
}
template<size_t S, typename T>
@@ -195,7 +200,7 @@ inline uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (volatile void *ptr, uint
#ifdef __TBB_CompareAndSwap1
return __TBB_CompareAndSwap1(ptr,value,comparand);
#else
- return __TBB_MaskedCompareAndSwap<1,uint8_t>((volatile int32_t *)ptr,value,comparand);
+ return __TBB_MaskedCompareAndSwap<1,uint8_t>((volatile uint8_t *)ptr,value,comparand);
#endif
}
@@ -204,7 +209,7 @@ inline uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (volatile void *ptr, ui
#ifdef __TBB_CompareAndSwap2
return __TBB_CompareAndSwap2(ptr,value,comparand);
#else
- return __TBB_MaskedCompareAndSwap<2,uint16_t>((volatile int32_t *)ptr,value,comparand);
+ return __TBB_MaskedCompareAndSwap<2,uint16_t>((volatile uint16_t *)ptr,value,comparand);
#endif
}
@@ -509,9 +514,17 @@ inline int64_t __TBB_Load8 (const volatile void *ptr) {
#ifndef __TBB_Log2
inline intptr_t __TBB_Log2( uintptr_t x ) {
- long result = -1;
- for(; x; x>>=1 ) ++result;
- return result;
+ if( x==0 ) return -1;
+ intptr_t result = 0;
+ uintptr_t tmp;
+#if __TBB_WORDSIZE>=8
+ if( (tmp = x>>32) ) { x=tmp; result += 32; }
+#endif
+ if( (tmp = x>>16) ) { x=tmp; result += 16; }
+ if( (tmp = x>>8) ) { x=tmp; result += 8; }
+ if( (tmp = x>>4) ) { x=tmp; result += 4; }
+ if( (tmp = x>>2) ) { x=tmp; result += 2; }
+ return (x&2)? result+1: result;
}
#endif
diff --git a/include/tbb/tbb_profiling.h b/include/tbb/tbb_profiling.h
new file mode 100644
index 0000000..a58c037
--- /dev/null
+++ b/include/tbb/tbb_profiling.h
@@ -0,0 +1,105 @@
+/*
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_profiling_H
+#define __TBB_profiling_H
+
+// Check if the tools support is enabled
+#if (_WIN32||_WIN64||__linux__) && TBB_USE_THREADING_TOOLS && __TBB_NAMING_API_SUPPORT
+
+#if _WIN32||_WIN64
+#include <stdlib.h> /* mbstowcs_s */
+#endif
+#include "tbb/tbb_stddef.h"
+
+namespace tbb {
+ namespace internal {
+#if _WIN32||_WIN64
+ void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const wchar_t* name );
+ inline size_t multibyte_to_widechar( wchar_t* wcs, const char* mbs, size_t bufsize) {
+#if _MSC_VER>=1400
+ size_t len;
+ mbstowcs_s( &len, wcs, bufsize, mbs, _TRUNCATE );
+ return len; // mbstowcs_s counts null terminator
+#else
+ size_t len = mbstowcs( wcs, mbs, bufsize );
+ if(wcs && len!=size_t(-1) )
+ wcs[len<bufsize-1? len: bufsize-1] = wchar_t('\0');
+ return len+1; // mbstowcs does not count null terminator
+#endif
+ }
+#else
+ void __TBB_EXPORTED_FUNC itt_set_sync_name_v3( void *obj, const char* name );
+#endif
+ } // namespace internal
+} // namespace tbb
+
+//! Macro __TBB_DEFINE_PROFILING_SET_NAME(T) defines "set_name" methods for sync objects of type T
+/** Should be used in the "tbb" namespace only.
+ Don't place semicolon after it to avoid compiler warnings. **/
+#if _WIN32||_WIN64
+ #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \
+ namespace profiling { \
+ inline void set_name( sync_object_type& obj, const wchar_t* name ) { \
+ tbb::internal::itt_set_sync_name_v3( &obj, name ); \
+ } \
+ inline void set_name( sync_object_type& obj, const char* name ) { \
+ size_t len = tbb::internal::multibyte_to_widechar(NULL, name, 0); \
+ wchar_t *wname = new wchar_t[len]; \
+ tbb::internal::multibyte_to_widechar(wname, name, len); \
+ set_name( obj, wname ); \
+ delete[] wname; \
+ } \
+ }
+#else /* !WIN */
+ #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \
+ namespace profiling { \
+ inline void set_name( sync_object_type& obj, const char* name ) { \
+ tbb::internal::itt_set_sync_name_v3( &obj, name ); \
+ } \
+ }
+#endif /* !WIN */
+
+#else /* no tools support */
+
+#if _WIN32||_WIN64
+ #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \
+ namespace profiling { \
+ inline void set_name( sync_object_type&, const wchar_t* ) {} \
+ inline void set_name( sync_object_type&, const char* ) {} \
+ }
+#else /* !WIN */
+ #define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type) \
+ namespace profiling { \
+ inline void set_name( sync_object_type&, const char* ) {} \
+ }
+#endif /* !WIN */
+
+#endif /* no tools support */
+
+#endif /* __TBB_profiling_H */
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
index 6ff8e59..7b36b32 100644
--- a/include/tbb/tbb_stddef.h
+++ b/include/tbb/tbb_stddef.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -34,7 +34,7 @@
#define TBB_VERSION_MINOR 1
// Engineering-focused interface version
-#define TBB_INTERFACE_VERSION 3011
+#define TBB_INTERFACE_VERSION 3015
#define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000
// The oldest major interface version still supported
@@ -124,7 +124,7 @@
#endif
#if _WIN32||_WIN64
-// define the parts of stdint.h that are needed, but put them inside tbb::internal
+// define the parts of stdint.h that are needed, but put them inside tbb::internal
namespace tbb {
namespace internal {
typedef __int8 int8_t;
@@ -141,6 +141,14 @@ namespace internal {
#include <stdint.h>
#endif
+#if _MSC_VER >=1400
+#define __TBB_EXPORTED_FUNC __cdecl
+#define __TBB_EXPORTED_METHOD __thiscall
+#else
+#define __TBB_EXPORTED_FUNC
+#define __TBB_EXPORTED_METHOD
+#endif
+
#include <cstddef> /* Need size_t and ptrdiff_t (the latter on Windows only) from here. */
#if _WIN32||_WIN64
@@ -149,12 +157,46 @@ namespace internal {
#undef __TBB_tbb_windef_H
#endif /* _WIN32||_WIN64 */
+#ifndef TBB_USE_DEBUG
+#ifdef TBB_DO_ASSERT
+#define TBB_USE_DEBUG TBB_DO_ASSERT
+#else
+#define TBB_USE_DEBUG 0
+#endif /* TBB_DO_ASSERT */
+#else
+#define TBB_DO_ASSERT TBB_USE_DEBUG
+#endif /* TBB_USE_DEBUG */
+
+#ifndef TBB_USE_ASSERT
+#ifdef TBB_DO_ASSERT
+#define TBB_USE_ASSERT TBB_DO_ASSERT
+#else
+#define TBB_USE_ASSERT TBB_USE_DEBUG
+#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
+
+#ifndef TBB_USE_THREADING_TOOLS
+#ifdef TBB_DO_THREADING_TOOLS
+#define TBB_USE_THREADING_TOOLS TBB_DO_THREADING_TOOLS
+#else
+#define TBB_USE_THREADING_TOOLS TBB_USE_DEBUG
+#endif /* TBB_DO_THREADING_TOOLS */
+#endif /* TBB_USE_THREADING_TOOLS */
+
+#ifndef TBB_USE_PERFORMANCE_WARNINGS
+#ifdef TBB_PERFORMANCE_WARNINGS
+#define TBB_USE_PERFORMANCE_WARNINGS TBB_PERFORMANCE_WARNINGS
+#else
+#define TBB_USE_PERFORMANCE_WARNINGS TBB_USE_DEBUG
+#endif /* TBB_PEFORMANCE_WARNINGS */
+#endif /* TBB_USE_PERFORMANCE_WARNINGS */
+
namespace tbb {
//! Type for an assertion handler
typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
}
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
//! Assert that x is true.
/** If x is false, print assertion failure message.
@@ -165,13 +207,13 @@ namespace tbb {
namespace tbb {
//! Set assertion handler and return previous value of it.
- assertion_handler_type set_assertion_handler( assertion_handler_type new_handler );
+ assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler );
//! Process an assertion failure.
/** Normally called from __TBB_ASSERT macro.
If assertion handler is null, print message for assertion failure and abort.
Otherwise call the assertion handler. */
- void assertion_failure( const char* filename, int line, const char* expression, const char* comment );
+ void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment );
} // namespace tbb
#else
@@ -181,11 +223,18 @@ namespace tbb {
//! "Extended" version is useful to suppress warnings if a variable is only used with an assert
#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
//! The namespace tbb contains all components of the library.
namespace tbb {
+//! The function returns the interface version of the TBB shared library being used.
+/**
+ * The version it returns is determined at runtime, not at compile/link time.
+ * So it can be different than the value of TBB_INTERFACE_VERSION obtained at compile time.
+ */
+extern "C" int __TBB_EXPORTED_FUNC TBB_runtime_interface_version();
+
//! Dummy type that distinguishes splitting constructor from copy constructor.
/**
* See description of parallel_for and parallel_reduce for example usages.
@@ -213,9 +262,9 @@ typedef size_t uintptr;
typedef std::ptrdiff_t intptr;
//! Report a runtime warning.
-void runtime_warning( const char* format, ... );
+void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... );
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
//! Set p to invalid pointer value.
template<typename T>
inline void poison_pointer( T* & p ) {
@@ -224,15 +273,23 @@ inline void poison_pointer( T* & p ) {
#else
template<typename T>
inline void poison_pointer( T* ) {/*do nothing*/}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
+
+//! Base class for types that should not be assigned.
+class no_assign {
+ // Deny assignment
+ void operator=( const no_assign& );
+public:
+#if __GNUC__
+ //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
+ no_assign() {}
+#endif /* __GNUC__ */
+};
//! Base class for types that should not be copied or assigned.
-class no_copy {
+class no_copy: no_assign {
//! Deny copy construction
no_copy( const no_copy& );
-
- // Deny assignment
- void operator=( const no_copy& );
public:
//! Allow default construction
no_copy() {}
@@ -254,16 +311,16 @@ typedef version_tag_v3 version_tag;
#ifndef __TBB_EXCEPTIONS
#define __TBB_EXCEPTIONS 1
#endif /* __TBB_EXCEPTIONS */
-
#endif
#ifndef __TBB_SCHEDULER_OBSERVER
#define __TBB_SCHEDULER_OBSERVER 1
#endif /* __TBB_SCHEDULER_OBSERVER */
-#ifndef TBB_PERFORMANCE_WARNINGS
-#define TBB_PERFORMANCE_WARNINGS TBB_DO_ASSERT
-#endif /* TBB_PERFORMANCE_WARNINGS */
+#ifndef __TBB_NAMING_API_SUPPORT
+#define __TBB_NAMING_API_SUPPORT 1
+#endif /* __TBB_NAMING_API_SUPPORT */
+
#endif /* RC_INVOKED */
#endif /* __TBB_tbb_stddef_H */
diff --git a/include/tbb/tbb_thread.h b/include/tbb/tbb_thread.h
index 8587f2b..6b40a9c 100644
--- a/include/tbb/tbb_thread.h
+++ b/include/tbb/tbb_thread.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -58,9 +58,9 @@ void swap( internal::tbb_thread_v3& t1, internal::tbb_thread_v3& t2 );
namespace internal {
//! Allocate a closure
- void* allocate_closure_v3( size_t size );
+ void* __TBB_EXPORTED_FUNC allocate_closure_v3( size_t size );
//! Free a closure allocated by allocate_closure_v3
- void free_closure_v3( void* );
+ void __TBB_EXPORTED_FUNC free_closure_v3( void* );
struct thread_closure_base {
void* operator new( size_t size ) {return allocate_closure_v3(size);}
@@ -119,7 +119,6 @@ namespace internal {
//! Versioned thread class.
class tbb_thread_v3 {
- tbb_thread_v3& operator=(const tbb_thread_v3&); // Deny access
tbb_thread_v3(const tbb_thread_v3&); // = delete; // Deny access
public:
#if _WIN32||_WIN64
@@ -152,17 +151,27 @@ namespace internal {
internal_start(closure_type::start_routine, new closure_type(f,x,y));
}
+ tbb_thread_v3& operator=(tbb_thread_v3& x) {
+ if (joinable()) detach();
+ my_handle = x.my_handle;
+ x.my_handle = 0;
+#if _WIN32||_WIN64
+ my_thread_id = x.my_thread_id;
+ x.my_thread_id = 0;
+#endif // _WIN32||_WIN64
+ return *this;
+ }
bool joinable() const {return my_handle!=0; }
//! The completion of the thread represented by *this happens before join() returns.
- void join();
+ void __TBB_EXPORTED_METHOD join();
//! When detach() returns, *this no longer represents the possibly continuing thread of execution.
- void detach();
+ void __TBB_EXPORTED_METHOD detach();
~tbb_thread_v3() {if( joinable() ) detach();}
inline id get_id() const;
native_handle_type native_handle() { return my_handle; }
//! The number of hardware thread contexts.
- static unsigned hardware_concurrency();
+ static unsigned __TBB_EXPORTED_FUNC hardware_concurrency();
private:
native_handle_type my_handle;
#if _WIN32||_WIN64
@@ -170,9 +179,9 @@ namespace internal {
#endif // _WIN32||_WIN64
/** Runs start_routine(closure) on another thread and sets my_handle to the handle of the created thread. */
- void internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
+ void __TBB_EXPORTED_METHOD internal_start( __TBB_NATIVE_THREAD_ROUTINE_PTR(start_routine),
void* closure );
- friend void move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+ friend void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
friend void tbb::swap( tbb_thread_v3& t1, tbb_thread_v3& t2 );
};
@@ -203,7 +212,7 @@ namespace internal {
out << id.my_id;
return out;
}
- friend tbb_thread_v3::id thread_get_id_v3();
+ friend tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
}; // tbb_thread_v3::id
tbb_thread_v3::id tbb_thread_v3::get_id() const {
@@ -213,10 +222,10 @@ namespace internal {
return id(my_handle);
#endif // _WIN32||_WIN64
}
- void move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
- tbb_thread_v3::id thread_get_id_v3();
- void thread_yield_v3();
- void thread_sleep_v3(const tick_count::interval_t &i);
+ void __TBB_EXPORTED_FUNC move_v3( tbb_thread_v3& t1, tbb_thread_v3& t2 );
+ tbb_thread_v3::id __TBB_EXPORTED_FUNC thread_get_id_v3();
+ void __TBB_EXPORTED_FUNC thread_yield_v3();
+ void __TBB_EXPORTED_FUNC thread_sleep_v3(const tick_count::interval_t &i);
inline bool operator==(tbb_thread_v3::id x, tbb_thread_v3::id y)
{
diff --git a/include/tbb/tick_count.h b/include/tbb/tick_count.h
index 18c0a6b..4956182 100644
--- a/include/tbb/tick_count.h
+++ b/include/tbb/tick_count.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -35,7 +35,6 @@
#include <windows.h>
#elif __linux__
#include <ctime>
-#include <stdio.h>
#else /* generic Unix */
#include <sys/time.h>
#endif /* (choice of OS) */
@@ -103,17 +102,17 @@ inline tick_count tick_count::now() {
result.my_count = qpcnt.QuadPart;
#elif __linux__
struct timespec ts;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
int status =
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
clock_gettime( CLOCK_REALTIME, &ts );
__TBB_ASSERT( status==0, "CLOCK_REALTIME not supported" );
result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
#else /* generic Unix */
struct timeval tv;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
int status =
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
gettimeofday(&tv, NULL);
__TBB_ASSERT( status==0, "gettimeofday failed" );
result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
diff --git a/index.html b/index.html
index c6a5165..96373a5 100644
--- a/index.html
+++ b/index.html
@@ -32,7 +32,7 @@ To port TBB to a new platform, operating system or architecture, see the <A HREF
<HR>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/src/Makefile b/src/Makefile
index 0ac9d96..280128d 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -27,7 +27,7 @@
tbb_root?=..
examples_root:=$(tbb_root)/examples
include $(tbb_root)/build/common.inc
-.PHONY: all tbb tbbmalloc test debug examples clean info
+.PHONY: all tbb tbbmalloc test test_no_depends release debug examples clean
all: release debug examples
@@ -72,9 +72,10 @@ native_examples: tbb tbbmalloc
$(MAKE) -C $(examples_root) -r -f Makefile tbb_root=.. $(subst examples/,,$(subst ../,,$@))
debug_%:: cfg?=debug
+debug_%:: run_cmd=$(debugger)
test_% stress_% time_%:: cfg?=release
debug_% test_% stress_% time_%::
- $(MAKE) -C "$(work_dir)_$(cfg)" -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) tbb_root=$(tbb_root) $@
+ $(MAKE) -C "$(work_dir)_$(cfg)" -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) run_cmd=$(run_cmd) tbb_root=$(tbb_root) $@
clean_%::
ifeq ($(cfg),)
@@ -84,7 +85,7 @@ else
@$(MAKE) -C "$(work_dir)_$(cfg)" -r -f $(tbb_root)/build/Makefile.test cfg=$(cfg) tbb_root=$(tbb_root) $@
endif
-.PHONY: tbb_release tbb_debug test_release test_debug
+.PHONY: tbb_release tbb_debug test_release test_debug test_release_no_depends test_debug_no_depends
# do not delete double-space after -C option
tbb_release: mkdir_release
@@ -102,6 +103,7 @@ test_debug_no_depends:
-$(MAKE) -C "$(call cross_cfg,$(work_dir)_debug)" -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
.PHONY: tbbmalloc_release tbbmalloc_debug tbbmalloc_test_release tbbmalloc_test_debug
+.PHONY: tbbmalloc_test_release_no_depends tbbmalloc_test_debug_no_depends
tbbmalloc_release: mkdir_release
$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
@@ -138,7 +140,7 @@ clean_debug:
clean_examples:
$(shell $(MAKE) -s -i -r -C $(examples_root) -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))
-.PHONY: mkdir_release mkdir_debug
+.PHONY: mkdir_release mkdir_debug codecov do_codecov info
mkdir_release:
$(shell $(MD) "$(work_dir)_release" >$(NUL) 2>$(NUL))
@@ -148,6 +150,14 @@ mkdir_debug:
$(shell $(MD) "$(work_dir)_debug" >$(NUL) 2>$(NUL))
$(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_debug" && $(MAKE_TBBVARS) $(tbb_build_prefix)_debug)
+codecov:
+ $(MAKE) tbb_root=.. compiler=$(if $(findstring windows,$(tbb_os)),icl,icc) codecov=yes do_codecov
+
+do_codecov:
+ $(MAKE) tbbmalloc_test_release test_release
+ $(RM) $(work_dir)_release$(SLASH)test_*.* >$(NUL) 2>$(NUL)
+ $(MAKE) crosstest=yes tbbmalloc_test_debug test_debug
+
info:
@echo OS: $(tbb_os)
@echo arch=$(arch)
diff --git a/src/index.html b/src/index.html
index 0e02b0b..121c99f 100644
--- a/src/index.html
+++ b/src/index.html
@@ -17,7 +17,7 @@ This directory contains the source code and unit tests for Threading Building Bl
<HR>
<A HREF="../index.html">Up to parent directory</A>
<p></p>
-Copyright © 2005-2008 Intel Corporation. All Rights Reserved.
+Copyright © 2005-2009 Intel Corporation. All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
diff --git a/src/old/concurrent_queue_v2.cpp b/src/old/concurrent_queue_v2.cpp
index 776547b..066b39b 100644
--- a/src/old/concurrent_queue_v2.cpp
+++ b/src/old/concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -37,7 +37,7 @@
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
#define RECORD_EVENTS 0
@@ -64,7 +64,7 @@ struct micro_queue {
spin_mutex page_mutex;
- class push_finalizer {
+ class push_finalizer: no_copy {
ticket my_ticket;
micro_queue& my_queue;
public:
@@ -78,7 +78,7 @@ struct micro_queue {
void push( const void* item, ticket k, concurrent_queue_base& base );
- class pop_finalizer {
+ class pop_finalizer: no_copy {
ticket my_ticket;
micro_queue& my_queue;
page* my_page;
@@ -144,10 +144,10 @@ public:
};
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( push )
-// unary minus operator applied to unsigned type, result still unsigned
-#pragma warning( disable: 4146 )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ // unary minus operator applied to unsigned type, result still unsigned
+ #pragma warning( push )
+ #pragma warning( disable: 4146 )
+#endif
//------------------------------------------------------------------------
// micro_queue
@@ -200,8 +200,8 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
}
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( pop )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ #pragma warning( pop )
+#endif
//------------------------------------------------------------------------
// concurrent_queue_base
@@ -311,7 +311,7 @@ void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t /*
//------------------------------------------------------------------------
// concurrent_queue_iterator_rep
//------------------------------------------------------------------------
-class concurrent_queue_iterator_rep {
+class concurrent_queue_iterator_rep: no_assign {
public:
typedef concurrent_queue_rep::ticket ticket;
ticket head_counter;
diff --git a/src/old/concurrent_queue_v2.h b/src/old/concurrent_queue_v2.h
index 7f49fb4..862384e 100644
--- a/src/old/concurrent_queue_v2.h
+++ b/src/old/concurrent_queue_v2.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -74,26 +74,26 @@ private:
virtual void copy_item( page& dst, size_t index, const void* src ) = 0;
virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;
protected:
- concurrent_queue_base( size_t item_size );
- virtual ~concurrent_queue_base();
+ __TBB_EXPORTED_METHOD concurrent_queue_base( size_t item_size );
+ virtual __TBB_EXPORTED_METHOD ~concurrent_queue_base();
//! Enqueue item at tail of queue
- void internal_push( const void* src );
+ void __TBB_EXPORTED_METHOD internal_push( const void* src );
//! Dequeue item from head of queue
- void internal_pop( void* dst );
+ void __TBB_EXPORTED_METHOD internal_pop( void* dst );
//! Attempt to enqueue item onto queue.
- bool internal_push_if_not_full( const void* src );
+ bool __TBB_EXPORTED_METHOD internal_push_if_not_full( const void* src );
//! Attempt to dequeue item from queue.
/** NULL if there was no item to dequeue. */
- bool internal_pop_if_present( void* dst );
+ bool __TBB_EXPORTED_METHOD internal_pop_if_present( void* dst );
//! Get size of queue
- ptrdiff_t internal_size() const;
+ ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const;
- void internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+ void __TBB_EXPORTED_METHOD internal_set_capacity( ptrdiff_t capacity, size_t element_size );
};
//! Type-independent portion of concurrent_queue_iterator.
@@ -113,7 +113,7 @@ protected:
mutable void* my_item;
//! Default constructor
- concurrent_queue_iterator_base() : my_rep(NULL), my_item(NULL) {}
+ __TBB_EXPORTED_METHOD concurrent_queue_iterator_base() : my_rep(NULL), my_item(NULL) {}
//! Copy constructor
concurrent_queue_iterator_base( const concurrent_queue_iterator_base& i ) : my_rep(NULL), my_item(NULL) {
@@ -124,13 +124,13 @@ protected:
concurrent_queue_iterator_base( const concurrent_queue_base& queue );
//! Assignment
- void assign( const concurrent_queue_iterator_base& i );
+ void __TBB_EXPORTED_METHOD assign( const concurrent_queue_iterator_base& i );
//! Advance iterator one step towards tail of queue.
- void advance();
+ void __TBB_EXPORTED_METHOD advance();
//! Destructor
- ~concurrent_queue_iterator_base();
+ __TBB_EXPORTED_METHOD ~concurrent_queue_iterator_base();
};
//! Meets requirements of a forward iterator for STL.
diff --git a/src/old/concurrent_vector_v2.cpp b/src/old/concurrent_vector_v2.cpp
index 12b7a60..000ca9f 100644
--- a/src/old/concurrent_vector_v2.cpp
+++ b/src/old/concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -37,7 +37,7 @@
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
namespace tbb {
diff --git a/src/old/concurrent_vector_v2.h b/src/old/concurrent_vector_v2.h
index c54393b..a9c3a3b 100644
--- a/src/old/concurrent_vector_v2.h
+++ b/src/old/concurrent_vector_v2.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -76,9 +76,9 @@ namespace internal {
typedef size_t size_type;
- void internal_reserve( size_type n, size_type element_size, size_type max_size );
+ void __TBB_EXPORTED_METHOD internal_reserve( size_type n, size_type element_size, size_type max_size );
- size_type internal_capacity() const;
+ size_type __TBB_EXPORTED_METHOD internal_capacity() const;
//! Requested size of vector
atomic<size_type> my_early_size;
@@ -93,7 +93,7 @@ namespace internal {
}
#endif /* TBB_DO_ASSERT */
};
-
+
atomic<segment_t*> my_segment;
segment_t my_storage[2];
@@ -106,18 +106,18 @@ namespace internal {
}
//! An operation on an n-lement array starting at begin.
- typedef void(*internal_array_op1)(void* begin, size_type n );
+ typedef void(__TBB_EXPORTED_FUNC *internal_array_op1)(void* begin, size_type n );
//! An operation on n-element destination array and n-element source array.
- typedef void(*internal_array_op2)(void* dst, const void* src, size_type n );
+ typedef void(__TBB_EXPORTED_FUNC *internal_array_op2)(void* dst, const void* src, size_type n );
- void internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init );
+ void __TBB_EXPORTED_METHOD internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init );
void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op1 init );
- size_type internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init );
- void* internal_push_back( size_type element_size, size_type& index );
- void internal_clear( internal_array_op1 destroy, bool reclaim_storage );
- void internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy );
- void internal_assign( const concurrent_vector_base& src, size_type element_size,
+ size_type __TBB_EXPORTED_METHOD internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init );
+ void* __TBB_EXPORTED_METHOD internal_push_back( size_type element_size, size_type& index );
+ void __TBB_EXPORTED_METHOD internal_clear( internal_array_op1 destroy, bool reclaim_storage );
+ void __TBB_EXPORTED_METHOD internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy );
+ void __TBB_EXPORTED_METHOD internal_assign( const concurrent_vector_base& src, size_type element_size,
internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
private:
//! Private functionality that does not cross DLL boundary.
@@ -457,16 +457,16 @@ private:
T& internal_subscript( size_type index ) const;
//! Construct n instances of T, starting at "begin".
- static void initialize_array( void* begin, size_type n );
+ static void __TBB_EXPORTED_FUNC initialize_array( void* begin, size_type n );
//! Construct n instances of T, starting at "begin".
- static void copy_array( void* dst, const void* src, size_type n );
+ static void __TBB_EXPORTED_FUNC copy_array( void* dst, const void* src, size_type n );
//! Assign n instances of T, starting at "begin".
- static void assign_array( void* dst, const void* src, size_type n );
+ static void __TBB_EXPORTED_FUNC assign_array( void* dst, const void* src, size_type n );
//! Destroy n instances of T, starting at "begin".
- static void destroy_array( void* begin, size_type n );
+ static void __TBB_EXPORTED_FUNC destroy_array( void* begin, size_type n );
};
template<typename T>
diff --git a/src/old/spin_rw_mutex_v2.cpp b/src/old/spin_rw_mutex_v2.cpp
index 5046c7a..912fd8e 100644
--- a/src/old/spin_rw_mutex_v2.cpp
+++ b/src/old/spin_rw_mutex_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -48,7 +48,7 @@ bool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)
{
ITT_NOTIFY(sync_prepare, mutex);
ExponentialBackoff backoff;
- while(true) {
+ for(;;) {
state_t s = mutex->state;
if( !(s & BUSY) ) { // no readers, no writers
if( CAS(mutex->state, WRITER, s) )
@@ -75,7 +75,7 @@ void spin_rw_mutex::internal_release_writer(spin_rw_mutex *mutex) {
void spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {
ITT_NOTIFY(sync_prepare, mutex);
ExponentialBackoff backoff;
- while(true) {
+ for(;;) {
state_t s = mutex->state;
if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
if( CAS(mutex->state, s+ONE_READER, s) )
diff --git a/src/old/spin_rw_mutex_v2.h b/src/old/spin_rw_mutex_v2.h
index 46f11ae..3285e8e 100644
--- a/src/old/spin_rw_mutex_v2.h
+++ b/src/old/spin_rw_mutex_v2.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -39,33 +39,33 @@ class spin_rw_mutex {
//! @cond INTERNAL
//! Present so that 1.0 headers work with 1.1 dynamic library.
- static void internal_itt_releasing(spin_rw_mutex *);
+ static void __TBB_EXPORTED_FUNC internal_itt_releasing(spin_rw_mutex *);
//! Internal acquire write lock.
- static bool internal_acquire_writer(spin_rw_mutex *);
+ static bool __TBB_EXPORTED_FUNC internal_acquire_writer(spin_rw_mutex *);
//! Out of line code for releasing a write lock.
/** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
- static void internal_release_writer(spin_rw_mutex *);
+ static void __TBB_EXPORTED_FUNC internal_release_writer(spin_rw_mutex *);
//! Internal acquire read lock.
- static void internal_acquire_reader(spin_rw_mutex *);
+ static void __TBB_EXPORTED_FUNC internal_acquire_reader(spin_rw_mutex *);
//! Internal upgrade reader to become a writer.
- static bool internal_upgrade(spin_rw_mutex *);
+ static bool __TBB_EXPORTED_FUNC internal_upgrade(spin_rw_mutex *);
//! Out of line code for downgrading a writer to a reader.
/** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
- static void internal_downgrade(spin_rw_mutex *);
+ static void __TBB_EXPORTED_FUNC internal_downgrade(spin_rw_mutex *);
//! Internal release read lock.
- static void internal_release_reader(spin_rw_mutex *);
+ static void __TBB_EXPORTED_FUNC internal_release_reader(spin_rw_mutex *);
//! Internal try_acquire write lock.
- static bool internal_try_acquire_writer(spin_rw_mutex *);
+ static bool __TBB_EXPORTED_FUNC internal_try_acquire_writer(spin_rw_mutex *);
//! Internal try_acquire read lock.
- static bool internal_try_acquire_reader(spin_rw_mutex *);
+ static bool __TBB_EXPORTED_FUNC internal_try_acquire_reader(spin_rw_mutex *);
//! @endcond
public:
diff --git a/src/old/test_concurrent_queue_v2.cpp b/src/old/test_concurrent_queue_v2.cpp
index 2aaaadc..4443b59 100644
--- a/src/old/test_concurrent_queue_v2.cpp
+++ b/src/old/test_concurrent_queue_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,7 +29,6 @@
#include "tbb/concurrent_queue.h"
#include "tbb/atomic.h"
#include "tbb/tick_count.h"
-#include "tbb/blocked_range.h"
#include "../test/harness_assert.h"
#include "../test/harness.h"
@@ -88,16 +87,13 @@ struct Body {
tbb::concurrent_queue<Foo>* queue;
const int nthread;
Body( int nthread_ ) : nthread(nthread_) {}
- void operator()( const tbb::blocked_range<int>& r ) const {
+ void operator()( long thread_id ) const {
long pop_kind[3] = {0,0,0};
int serial[MAXTHREAD+1];
memset( serial, 0, nthread*sizeof(unsigned) );
- ASSERT( r.begin()+1==r.end(), NULL );
- ASSERT( r.begin()<nthread, NULL );
- ASSERT( r.end()<=nthread, NULL );
+ ASSERT( thread_id<nthread, NULL );
long sum = 0;
- long thread_id = r.begin();
for( long j=0; j<M; ++j ) {
Foo f;
f.thread_id = 0xDEAD;
@@ -120,7 +116,7 @@ struct Body {
serial[f.thread_id] = f.serial;
sum += f.serial-1;
}
- Sum[r.begin()] = sum;
+ Sum[thread_id] = sum;
for( int k=0; k<3; ++k )
PopKind[k] += pop_kind[k];
}
@@ -149,7 +145,7 @@ void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
ASSERT( !queue.empty(), NULL );
}
tbb::tick_count t0 = tbb::tick_count::now();
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), body );
+ NativeParallelFor( nthread, body );
tbb::tick_count t1 = tbb::tick_count::now();
double timing = (t1-t0).seconds();
if( Verbose )
@@ -187,10 +183,14 @@ void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
#endif /* _WIN32||_WIN64 */
if( PopKind[k]<min_requirement ) {
if( trial>=max_trial ) {
- printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d)\n",
- nthread, long(PopKind[k]), k==0?"fail":"succeed", max_trial, min_requirement);
- printf("This problem may merely be unlucky scheduling.\n"
- "Investigate only if it happens repeatedly.\n");
+ if( Verbose )
+ printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). "
+ "This problem may merely be unlucky scheduling. "
+ "Investigate only if it happens repeatedly.\n",
+ nthread, long(PopKind[k]), k==0?"failed":"succeeded", max_trial, min_requirement);
+ else
+ printf("Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\n",
+ k==0?"failed":"succeeded", nthread );
} else {
success = false;
}
@@ -305,8 +305,8 @@ struct TestNegativeQueueBody {
tbb::concurrent_queue<T>& queue;
const int nthread;
TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
- void operator()( const tbb::blocked_range<int>& range ) const {
- if( range.begin()==0 ) {
+ void operator()( int k ) const {
+ if( k==0 ) {
int number_of_pops = nthread-1;
// Wait for all pops to pend.
while( queue.size()>-number_of_pops ) {
@@ -331,7 +331,7 @@ struct TestNegativeQueueBody {
template<typename T>
void TestNegativeQueue( int nthread ) {
tbb::concurrent_queue<T> queue;
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), TestNegativeQueueBody<T>(queue,nthread) );
+ NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
}
int main( int argc, char* argv[] ) {
diff --git a/src/old/test_concurrent_vector_v2.cpp b/src/old/test_concurrent_vector_v2.cpp
index 7bc02c3..68a7311 100644
--- a/src/old/test_concurrent_vector_v2.cpp
+++ b/src/old/test_concurrent_vector_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -434,7 +434,7 @@ void TestConcurrentGrowBy( int nthread ) {
}
delete[] found;
if( nthread>1 && inversions<m/10 )
- std::printf("WARNING: not much concurrency in TestConcurrentGrowBy\n");
+ std::printf("Warning: not much concurrency in TestConcurrentGrowBy\n");
}
//! Test the assignment operator
diff --git a/src/old/test_mutex_v2.cpp b/src/old/test_mutex_v2.cpp
index 16c6881..4e2a1ef 100644
--- a/src/old/test_mutex_v2.cpp
+++ b/src/old/test_mutex_v2.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/harness_barrier.h b/src/perf/harness_barrier.h
index d1422fd..8155ea7 100644
--- a/src/perf/harness_barrier.h
+++ b/src/perf/harness_barrier.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/perf_util.h b/src/perf/perf_util.h
index 269cf2a..b5c5c70 100644
--- a/src/perf/perf_util.h
+++ b/src/perf/perf_util.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -228,7 +228,7 @@ double RunTestImpl ( const char* title, void (*pfn)(), char* histogramFileName =
util::trace_histogram(t, histogramFileName);
double clean_time = time - util::base;
if ( title ) {
- // Deviation (in percent) is calulated for the Gross time
+ // Deviation (in percent) is calculated for the Gross time
printf ("\n%-34s %.2e %5.1f ", title, clean_time, deviation);
if ( util::sequential_time != 0 )
//printf ("% .2e ", clean_time - util::sequential_time);
@@ -275,8 +275,9 @@ void Test();
inline
int test_main( int argc, char* argv[] ) {
+ MinThread = 1;
+ MaxThread = tbb::task_scheduler_init::default_num_threads();
ParseCommandLine( argc, argv );
- ASSERT (MinThread>=2, "Minimal number of threads must be 2 or more");
char buf[128];
util::rate_field_len = 2 + sprintf(buf, "%.1e", 1.1);
for ( int i = MinThread; i <= MaxThread; ++i ) {
diff --git a/src/perf/statistics.cpp b/src/perf/statistics.cpp
index 94bcea3..3ced834 100644
--- a/src/perf/statistics.cpp
+++ b/src/perf/statistics.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/statistics.h b/src/perf/statistics.h
index 545186c..dd4348c 100644
--- a/src/perf/statistics.h
+++ b/src/perf/statistics.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/statistics_xml.h b/src/perf/statistics_xml.h
index da83848..bd3244d 100644
--- a/src/perf/statistics_xml.h
+++ b/src/perf/statistics_xml.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/time_base.cpp b/src/perf/time_base.cpp
index 11ef231..61a5917 100644
--- a/src/perf/time_base.cpp
+++ b/src/perf/time_base.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/time_framework.h b/src/perf/time_framework.h
index 2ef245e..dadc2c3 100644
--- a/src/perf/time_framework.h
+++ b/src/perf/time_framework.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/time_hash_map.cpp b/src/perf/time_hash_map.cpp
index ab63e24..f19edbb 100644
--- a/src/perf/time_hash_map.cpp
+++ b/src/perf/time_hash_map.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/time_unit.cpp b/src/perf/time_unit.cpp
index 269cf2a..8d8162d 100644
--- a/src/perf/time_unit.cpp
+++ b/src/perf/time_unit.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/perf/time_vector.cpp b/src/perf/time_vector.cpp
index 800d6ff..f2d8672 100644
--- a/src/perf/time_vector.cpp
+++ b/src/perf/time_vector.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
index 7844ef1..97a5e6e 100644
--- a/src/tbb/cache_aligned_allocator.cpp
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -100,11 +100,11 @@ static void (*padded_free_handler)( void* p ) = &dummy_padded_free;
#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY
-#if TBB_DO_ASSERT
+#if TBB_USE_DEBUG
#define DEBUG_SUFFIX "_debug"
#else
#define DEBUG_SUFFIX
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_DEBUG */
// MALLOCLIB_NAME is the name of the TBB memory allocator library.
#if _WIN32||_WIN64
@@ -188,12 +188,11 @@ size_t NFS_GetLineSize() {
const size_t BigSize = 4096;
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( push )
-// unary minus operator applied to unsigned type, result still unsigned
-#pragma warning( disable: 4146 )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ // unary minus operator applied to unsigned type, result still unsigned
+ #pragma warning( disable: 4146 4706 )
+#endif
-void* NFS_Allocate( size_t n, size_t element_size, void* hint ) {
+void* NFS_Allocate( size_t n, size_t element_size, void* /*hint*/ ) {
size_t m = NFS_LineSize;
__TBB_ASSERT( m<=NFS_MaxLineSize, "illegal value for NFS_LineSize" );
__TBB_ASSERT( (m & m-1)==0, "must be power of two" );
@@ -275,7 +274,7 @@ static void padded_free( void* p ) {
}
#endif // #if __TBB_IS_SCALABLE_MALLOC_FIX_READY
-void* allocate_via_handler_v3( size_t n ) {
+void* __TBB_EXPORTED_FUNC allocate_via_handler_v3( size_t n ) {
void* result;
result = (*MallocHandler) (n);
if (!result) {
@@ -285,13 +284,13 @@ void* allocate_via_handler_v3( size_t n ) {
return result;
}
-void deallocate_via_handler_v3( void *p ) {
+void __TBB_EXPORTED_FUNC deallocate_via_handler_v3( void *p ) {
if( p ) {
(*FreeHandler)( p );
}
}
-bool is_malloc_used_v3() {
+bool __TBB_EXPORTED_FUNC is_malloc_used_v3() {
if (MallocHandler == &DummyMalloc) {
void* void_ptr = (*MallocHandler)(1);
(*FreeHandler)(void_ptr);
@@ -301,9 +300,6 @@ bool is_malloc_used_v3() {
MallocHandler!=&malloc && FreeHandler!=&free, NULL );
return MallocHandler == &malloc;
}
-#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( pop )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
} // namespace internal
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
index 528e15a..4d476c6 100644
--- a/src/tbb/concurrent_hash_map.cpp
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/tbb/concurrent_queue.cpp b/src/tbb/concurrent_queue.cpp
index fd51ee7..9ae2bf1 100644
--- a/src/tbb/concurrent_queue.cpp
+++ b/src/tbb/concurrent_queue.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -49,7 +49,7 @@ using namespace std;
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
#define RECORD_EVENTS 0
@@ -84,25 +84,19 @@ struct micro_queue {
spin_mutex page_mutex;
- class push_finalizer {
- ticket my_ticket;
- micro_queue& my_queue;
- public:
- push_finalizer( micro_queue& queue, ticket k ) :
- my_ticket(k), my_queue(queue)
- {}
- ~push_finalizer() {
- my_queue.tail_counter = my_ticket;
- }
- };
-
void push( const void* item, ticket k, concurrent_queue_base& base );
bool pop( void* dst, ticket k, concurrent_queue_base& base );
+
+ micro_queue& assign( const micro_queue& src, concurrent_queue_base& base );
+
+ page* make_copy ( concurrent_queue_base& base, const page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index ) ;
+
+ void make_invalid( ticket k );
};
// we need to yank it out of micro_queue because of concurrent_queue_base::deallocate_page being virtual.
-class micro_queue_pop_finalizer {
+class micro_queue_pop_finalizer: no_copy {
typedef concurrent_queue_base::page page;
ticket my_ticket;
micro_queue& my_queue;
@@ -161,29 +155,31 @@ public:
atomic<ticket> head_counter;
waitvar_t var_wait_for_items;
mutexvar_t mtx_items_avail;
- uint16_t n_waiting_consumers;
+ atomic<size_t> n_invalid_entries;
+ atomic<uint32_t> n_waiting_consumers;
#if _WIN32||_WIN64
- uint16_t consumer_wait_generation;
- uint16_t n_consumers_to_wakeup;
- char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint16_t)+sizeof(uint16_t)+sizeof(uint16_t))&(NFS_MaxLineSize-1))];
+ uint32_t consumer_wait_generation;
+ uint32_t n_consumers_to_wakeup;
+ char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(size_t)+sizeof(uint32_t)+sizeof(uint32_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
#else
- char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint16_t))&(NFS_MaxLineSize-1))];
+ char pad1[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(size_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
#endif
atomic<ticket> tail_counter;
waitvar_t var_wait_for_slots;
mutexvar_t mtx_slots_avail;
- uint16_t n_waiting_producers;
+ atomic<uint32_t> n_waiting_producers;
#if _WIN32||_WIN64
- uint16_t producer_wait_generation;
- uint16_t n_producers_to_wakeup;
- char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint16_t)+sizeof(uint16_t)+sizeof(uint16_t))&(NFS_MaxLineSize-1))];
+ uint32_t producer_wait_generation;
+ uint32_t n_producers_to_wakeup;
+ char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint32_t)+sizeof(uint32_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
#else
- char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint16_t))&(NFS_MaxLineSize-1))];
+ char pad2[NFS_MaxLineSize-((sizeof(atomic<ticket>)+sizeof(waitvar_t)+sizeof(mutexvar_t)+sizeof(uint32_t))&(NFS_MaxLineSize-1))];
#endif
#else /* !__TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
atomic<ticket> head_counter;
- char pad1[NFS_MaxLineSize-sizeof(atomic<ticket)>];
+ atomic<size_t> n_invalid_entries;
+ char pad1[NFS_MaxLineSize-sizeof(atomic<ticket)-sizeof(size_t)>];
atomic<ticket> tail_counter;
char pad2[NFS_MaxLineSize-sizeof(atomic<ticket>)];
#endif /* __TBB_NO_BUSY_WAIT_IN_CONCURRENT_QUEUE */
@@ -199,10 +195,10 @@ public:
};
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( push )
-// unary minus operator applied to unsigned type, result still unsigned
-#pragma warning( disable: 4146 )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ // unary minus operator applied to unsigned type, result still unsigned
+ #pragma warning( push )
+ #pragma warning( disable: 4146 )
+#endif
static void* invalid_page;
@@ -211,54 +207,54 @@ static void* invalid_page;
// micro_queue
//------------------------------------------------------------------------
void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {
- static concurrent_queue_base::page dummy = {static_cast<page*>((void*)1), 0};
k &= -concurrent_queue_rep::n_queue;
page* p = NULL;
- size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+ size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
if( !index ) {
try {
p = base.allocate_page();
} catch (...) {
- // mark it so that no more pushes are allowed.
- invalid_page = &dummy;
- spin_mutex::scoped_lock lock( page_mutex );
- tail_counter = k+concurrent_queue_rep::n_queue+1;
- if( page* q = tail_page )
- q->next = static_cast<page*>(invalid_page);
- else
- head_page = static_cast<page*>(invalid_page);
- tail_page = static_cast<page*>(invalid_page);
- throw;
+ ++base.my_rep->n_invalid_entries;
+ make_invalid( k );
}
p->mask = 0;
p->next = NULL;
}
- {
- push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue );
- if( tail_counter!=k ) {
- ExponentialBackoff backoff;
- do {
- backoff.pause();
- // no memory. throws an exception
- if( tail_counter&0x1 ) throw bad_last_alloc();
- } while( tail_counter!=k ) ;
- }
+
+ if( tail_counter!=k ) {
+ ExponentialBackoff backoff;
+ do {
+ backoff.pause();
+ // no memory. throws an exception; assumes concurrent_queue_rep::n_queue>1
+ if( tail_counter&0x1 ) {
+ ++base.my_rep->n_invalid_entries;
+ throw bad_last_alloc();
+ }
+ } while( tail_counter!=k ) ;
+ }
- if( p ) {
- spin_mutex::scoped_lock lock( page_mutex );
- if( page* q = tail_page )
- q->next = p;
- else
- head_page = p;
- tail_page = p;
- } else {
- p = tail_page;
- }
- ITT_NOTIFY( sync_acquired, p );
+ if( p ) {
+ spin_mutex::scoped_lock lock( page_mutex );
+ if( page* q = tail_page )
+ q->next = p;
+ else
+ head_page = p;
+ tail_page = p;
+ } else {
+ p = tail_page;
+ }
+ ITT_NOTIFY( sync_acquired, p );
+
+ try {
base.copy_item( *p, index, item );
ITT_NOTIFY( sync_releasing, p );
// If no exception was thrown, mark item as present.
p->mask |= uintptr(1)<<index;
+ tail_counter += concurrent_queue_rep::n_queue;
+ } catch (...) {
+ ++base.my_rep->n_invalid_entries;
+ tail_counter += concurrent_queue_rep::n_queue;
+ throw;
}
}
@@ -268,7 +264,7 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
SpinwaitWhileEq( tail_counter, k );
page& p = *head_page;
__TBB_ASSERT( &p, NULL );
- size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+ size_t index = k/concurrent_queue_rep::n_queue & (base.items_per_page-1);
bool success = false;
{
micro_queue_pop_finalizer finalizer( *this, base, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL );
@@ -283,14 +279,85 @@ bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
ITT_NOTIFY( sync_acquired, head_page );
base.assign_and_destroy_item( dst, p, index );
ITT_NOTIFY( sync_releasing, head_page );
+ } else {
+ --base.my_rep->n_invalid_entries;
}
}
return success;
}
+micro_queue& micro_queue::assign( const micro_queue& src, concurrent_queue_base& base )
+{
+ head_counter = src.head_counter;
+ tail_counter = src.tail_counter;
+ page_mutex = src.page_mutex;
+
+ const page* srcp = src.head_page;
+ if( srcp ) {
+ ticket g_index = head_counter;
+ try {
+ size_t n_items = (tail_counter-head_counter)/concurrent_queue_rep::n_queue;
+ size_t index = (head_counter/concurrent_queue_rep::n_queue & base.items_per_page-1);
+ size_t end_in_first_page = (index+n_items<base.items_per_page)?(index+n_items):base.items_per_page;
+
+ head_page = make_copy( base, srcp, index, end_in_first_page, g_index );
+ page* cur_page = head_page;
+
+ if( srcp != src.tail_page ) {
+ for( srcp = srcp->next; srcp!=src.tail_page; srcp=srcp->next ) {
+ cur_page->next = make_copy( base, srcp, 0, base.items_per_page, g_index );
+ cur_page = cur_page->next;
+ }
+
+ __TBB_ASSERT( srcp==src.tail_page, NULL );
+
+ size_t last_index = tail_counter/concurrent_queue_rep::n_queue & (base.items_per_page-1);
+ if( last_index==0 ) last_index = base.items_per_page;
+
+ cur_page->next = make_copy( base, srcp, 0, last_index, g_index );
+ cur_page = cur_page->next;
+ }
+ tail_page = cur_page;
+ } catch (...) {
+ make_invalid( g_index );
+ }
+ } else {
+ head_page = tail_page = NULL;
+ }
+ return *this;
+}
+
+concurrent_queue_base::page* micro_queue::make_copy( concurrent_queue_base& base, const concurrent_queue_base::page* src_page, size_t begin_in_page, size_t end_in_page, ticket& g_index )
+{
+ page* new_page = base.allocate_page();
+ new_page->next = NULL;
+ new_page->mask = src_page->mask;
+ for( ; begin_in_page!=end_in_page; ++begin_in_page, ++g_index )
+ if( new_page->mask & uintptr(1)<<begin_in_page )
+ base.copy_item( *new_page, begin_in_page, *src_page, begin_in_page );
+ return new_page;
+}
+
+void micro_queue::make_invalid( ticket k )
+{
+ static concurrent_queue_base::page dummy = {static_cast<page*>((void*)1), 0};
+ // mark it so that no more pushes are allowed.
+ invalid_page = &dummy;
+ {
+ spin_mutex::scoped_lock lock( page_mutex );
+ tail_counter = k+concurrent_queue_rep::n_queue+1;
+ if( page* q = tail_page )
+ q->next = static_cast<page*>(invalid_page);
+ else
+ head_page = static_cast<page*>(invalid_page);
+ tail_page = static_cast<page*>(invalid_page);
+ }
+ throw;
+}
+
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( pop )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ #pragma warning( pop )
+#endif // warning 4146 is back
//------------------------------------------------------------------------
// concurrent_queue_base
@@ -389,7 +456,7 @@ void concurrent_queue_base_v3::internal_push( const void* src ) {
EnterCriticalSection( &r.mtx_slots_avail );
r.n_waiting_producers++;
while( (ptrdiff_t)(k-r.head_counter)>=const_cast<volatile ptrdiff_t&>(my_capacity) ) {
- int my_generation = r.producer_wait_generation;
+ uint32_t my_generation = r.producer_wait_generation;
for( ;; ) {
LeaveCriticalSection( &r.mtx_slots_avail );
WaitForSingleObject( r.var_wait_for_slots, INFINITE );
@@ -400,6 +467,7 @@ void concurrent_queue_base_v3::internal_push( const void* src ) {
if( --r.n_producers_to_wakeup == 0 )
ResetEvent( r.var_wait_for_slots );
}
+ --r.n_waiting_producers;
LeaveCriticalSection( &r.mtx_slots_avail );
break;
}
@@ -493,7 +561,7 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
EnterCriticalSection( &r.mtx_items_avail );
r.n_waiting_consumers++;
while( r.tail_counter<=k ) {
- int my_generation = r.consumer_wait_generation;
+ uint32_t my_generation = r.consumer_wait_generation;
for( ;; ) {
LeaveCriticalSection( &r.mtx_items_avail );
WaitForSingleObject( r.var_wait_for_items, INFINITE );
@@ -504,6 +572,7 @@ void concurrent_queue_base_v3::internal_pop( void* dst ) {
if( --r.n_consumers_to_wakeup == 0 )
ResetEvent( r.var_wait_for_items );
}
+ --r.n_waiting_consumers;
LeaveCriticalSection( &r.mtx_items_avail );
backoff.reset();
break; // break from inner while
@@ -647,7 +716,8 @@ bool concurrent_queue_base_v3::internal_push_if_not_full( const void* src ) {
ptrdiff_t concurrent_queue_base_v3::internal_size() const {
__TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );
- return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter);
+ __TBB_ASSERT( ptrdiff_t(my_rep->tail_counter-my_rep->head_counter)>=0 || my_rep->n_invalid_entries==0, NULL );
+ return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter-my_rep->n_invalid_entries);
}
void concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t /*item_size*/ ) {
@@ -656,7 +726,7 @@ void concurrent_queue_base_v3::internal_set_capacity( ptrdiff_t capacity, size_t
void concurrent_queue_base_v3::internal_finish_clear() {
size_t nq = my_rep->n_queue;
- for( size_t i=0; i<nq; i++ ) {
+ for( size_t i=0; i<nq; ++i ) {
page* tp = my_rep->array[i].tail_page;
__TBB_ASSERT( my_rep->array[i].head_page==tp, "at most one page should remain" );
if( tp!=NULL) {
@@ -670,10 +740,27 @@ void concurrent_queue_base_v3::internal_throw_exception() const {
throw bad_alloc();
}
+void concurrent_queue_base_v3::assign( const concurrent_queue_base_v3& src ) {
+ items_per_page = src.items_per_page;
+ my_capacity = src.my_capacity;
+
+ // copy concurrent_queue_rep.
+ my_rep->head_counter = src.my_rep->head_counter;
+ my_rep->tail_counter = src.my_rep->tail_counter;
+ my_rep->n_invalid_entries = src.my_rep->n_invalid_entries;
+
+ // copy micro_queues
+ for( size_t i = 0; i<my_rep->n_queue; ++i )
+ my_rep->array[i].assign( src.my_rep->array[i], *this);
+
+ __TBB_ASSERT( my_rep->head_counter==src.my_rep->head_counter && my_rep->tail_counter==src.my_rep->tail_counter,
+ "the source concurrent queue should not be concurrently modified." );
+}
+
//------------------------------------------------------------------------
// concurrent_queue_iterator_rep
//------------------------------------------------------------------------
-class concurrent_queue_iterator_rep {
+class concurrent_queue_iterator_rep: no_assign {
public:
ticket head_counter;
const concurrent_queue_base& my_queue;
@@ -686,15 +773,17 @@ public:
for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )
array[k] = rep.array[k].head_page;
}
- //! Get pointer to kth element
- void* choose( size_t k ) {
- if( k==my_queue.my_rep->tail_counter )
- return NULL;
- else {
+ //! Set item to point to kth element. Return true if at end of queue or item is marked valid; false otherwise.
+ bool get_item( void*& item, size_t k ) {
+ if( k==my_queue.my_rep->tail_counter ) {
+ item = NULL;
+ return true;
+ } else {
concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];
__TBB_ASSERT(p,NULL);
size_t i = k/concurrent_queue_rep::n_queue & my_queue.items_per_page-1;
- return static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;
+ item = static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;
+ return (p->mask & uintptr(1)<<i)!=0;
}
}
};
@@ -705,7 +794,8 @@ public:
concurrent_queue_iterator_base_v3::concurrent_queue_iterator_base_v3( const concurrent_queue_base& queue ) {
my_rep = cache_aligned_allocator<concurrent_queue_iterator_rep>().allocate(1);
new( my_rep ) concurrent_queue_iterator_rep(queue);
- my_item = my_rep->choose(my_rep->head_counter);
+ size_t k = my_rep->head_counter;
+ if( !my_rep->get_item(my_item, k) ) advance();
}
void concurrent_queue_iterator_base_v3::assign( const concurrent_queue_iterator_base& other ) {
@@ -726,14 +816,19 @@ void concurrent_queue_iterator_base_v3::advance() {
__TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );
size_t k = my_rep->head_counter;
const concurrent_queue_base& queue = my_rep->my_queue;
- __TBB_ASSERT( my_item==my_rep->choose(k), NULL );
- size_t i = k/concurrent_queue_rep::n_queue & queue.items_per_page-1;
+#if TBB_USE_ASSERT
+ void* tmp;
+ my_rep->get_item(tmp,k);
+ __TBB_ASSERT( my_item==tmp, NULL );
+#endif /* TBB_USE_ASSERT */
+ size_t i = k/concurrent_queue_rep::n_queue & (queue.items_per_page-1);
if( i==queue.items_per_page-1 ) {
concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];
root = root->next;
}
- my_rep->head_counter = k+1;
- my_item = my_rep->choose(k+1);
+ // advance k
+ my_rep->head_counter = ++k;
+ if( !my_rep->get_item(my_item, k) ) advance();
}
concurrent_queue_iterator_base_v3::~concurrent_queue_iterator_base_v3() {
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
index 372c7dc..ce7fba9 100644
--- a/src/tbb/concurrent_vector.cpp
+++ b/src/tbb/concurrent_vector.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,16 +27,16 @@
*/
#include "tbb/concurrent_vector.h"
+#include "tbb/cache_aligned_allocator.h"
#include "tbb/tbb_exception.h"
#include "tbb_misc.h"
#include "itt_notify.h"
-#include "tbb/task.h"
#include <cstring>
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
using namespace std;
@@ -74,35 +74,50 @@ public:
return ptr;
}
+ //! Publish segment so other threads can see it.
+ inline static void publish_segment( segment_t& s, void* rhs ) {
+ //TODO: see also itt_store_pointer_with_release_v3()
+ ITT_NOTIFY( sync_releasing, &s.array );
+ __TBB_store_with_release( s.array, rhs );
+ }
+
inline static size_type enable_segment(concurrent_vector_base_v3 &v, size_type k, size_type element_size) {
__TBB_ASSERT( !v.my_segment[k].array, "concurrent operation during growth?" );
- size_type m = segment_size(k);
if( !k ) {
assign_first_segment_if_neccessary(v, default_initial_segments-1, element_size);
try {
- __TBB_store_with_release(v.my_segment[0].array, allocate_segment(v, segment_size(v.my_first_block) ) );
+ publish_segment(v.my_segment[0], allocate_segment(v, segment_size(v.my_first_block) ) );
} catch(...) { // intercept exception here, assign __TBB_BAD_ALLOC value, re-throw exception
- __TBB_store_with_release(v.my_segment[0].array, __TBB_BAD_ALLOC); throw;
+ publish_segment(v.my_segment[0], __TBB_BAD_ALLOC); throw;
}
return 2;
}
+ size_type m = segment_size(k);
if( !v.my_first_block )
internal::SpinwaitWhileEq( v.my_first_block, segment_index_t(0) );
if( k < v.my_first_block ) {
- if( !v.my_segment[0].array )
- internal::SpinwaitWhileEq( v.my_segment[0].array, (void*)0 );
- void *array0 = v.my_segment[0].array;
+ segment_t* s = v.my_segment;
+ // s[0].array is changed only once ( 0 -> !0 ) and points to uninitialized memory
+ void *array0 = __TBB_load_with_acquire(s[0].array);
+ if( !array0 ) {
+ // sync_prepare called only if there is a wait
+ ITT_NOTIFY(sync_prepare, &s[0].array );
+ internal::SpinwaitWhileEq( s[0].array, (void*)0 );
+ array0 = __TBB_load_with_acquire(s[0].array);
+ }
+ ITT_NOTIFY(sync_acquired, &s[0].array);
if( array0 <= __TBB_BAD_ALLOC ) { // check for __TBB_BAD_ALLOC of initial segment
- __TBB_store_with_release(v.my_segment[k].array, __TBB_BAD_ALLOC); // and assign __TBB_BAD_ALLOC here
+ publish_segment(s[k], __TBB_BAD_ALLOC); // and assign __TBB_BAD_ALLOC here
throw bad_last_alloc(); // throw custom exception
}
- __TBB_store_with_release(v.my_segment[k].array, static_cast<void*>(
- static_cast<char*>(array0) + segment_base(k)*element_size ) );
+ publish_segment( s[k],
+ static_cast<void*>( static_cast<char*>(array0) + segment_base(k)*element_size )
+ );
} else {
try {
- __TBB_store_with_release(v.my_segment[k].array, allocate_segment(v, m));
+ publish_segment(v.my_segment[k], allocate_segment(v, m));
} catch(...) { // intercept exception here, assign __TBB_BAD_ALLOC value, re-throw exception
- __TBB_store_with_release(v.my_segment[k].array, __TBB_BAD_ALLOC); throw;
+ publish_segment(v.my_segment[k], __TBB_BAD_ALLOC); throw;
}
}
return m;
@@ -230,8 +245,8 @@ void concurrent_vector_base_v3::internal_assign( const concurrent_vector_base_v3
}
void* concurrent_vector_base_v3::internal_push_back( size_type element_size, size_type& index ) {
- __TBB_ASSERT( sizeof(my_early_size)==sizeof(reference_count), NULL );
- size_type tmp = __TBB_FetchAndIncrementWacquire((tbb::internal::reference_count*)&my_early_size);
+ __TBB_ASSERT( sizeof(my_early_size)==sizeof(uintptr), NULL );
+ size_type tmp = __TBB_FetchAndIncrementWacquire(&my_early_size);
index = tmp;
segment_index_t k_old = segment_index_of( tmp );
size_type base = segment_base(k_old);
@@ -240,12 +255,13 @@ void* concurrent_vector_base_v3::internal_push_back( size_type element_size, siz
if( !__TBB_load_with_acquire(s.array) ) { // do not check for __TBB_BAD_ALLOC because it's hard to recover after __TBB_BAD_ALLOC correctly
if( base==tmp ) {
helper::enable_segment(*this, k_old, element_size);
- ITT_NOTIFY( sync_releasing, &s.array );
} else {
ITT_NOTIFY(sync_prepare, &s.array);
internal::SpinwaitWhileEq( s.array, (void*)0 );
ITT_NOTIFY(sync_acquired, &s.array);
}
+ } else {
+ ITT_NOTIFY(sync_acquired, &s.array);
}
if( s.array <= __TBB_BAD_ALLOC ) // check for __TBB_BAD_ALLOC
throw bad_last_alloc(); // throw custom exception
@@ -283,12 +299,13 @@ void concurrent_vector_base_v3::internal_grow( const size_type start, size_type
if( !__TBB_load_with_acquire(s.array) ) { // do not check for __TBB_BAD_ALLOC because it's hard to recover after __TBB_BAD_ALLOC correctly
if( base==tmp ) {
helper::enable_segment(*this, k_old, element_size);
- ITT_NOTIFY( sync_releasing, &s.array );
} else {
ITT_NOTIFY(sync_prepare, &s.array);
internal::SpinwaitWhileEq( s.array, (void*)0 );
ITT_NOTIFY(sync_acquired, &s.array);
}
+ } else {
+ ITT_NOTIFY(sync_acquired, &s.array);
}
if( s.array <= __TBB_BAD_ALLOC ) // check for __TBB_BAD_ALLOC
throw bad_last_alloc(); // throw custom exception
@@ -324,10 +341,9 @@ concurrent_vector_base_v3::segment_index_t concurrent_vector_base_v3::internal_c
void *concurrent_vector_base_v3::internal_compact( size_type element_size, void *table, internal_array_op1 destroy, internal_array_op2 copy )
{
const size_type my_size = my_early_size;
- if( !my_size ) return NULL;
- const segment_index_t k_end = helper::find_segment_end(*this);
- const segment_index_t k_stop = segment_index_of(my_size-1) + 1;
- const segment_index_t first_block = my_first_block; // getting values from atomics
+ const segment_index_t k_end = helper::find_segment_end(*this); // allocated segments
+ const segment_index_t k_stop = my_size? segment_index_of(my_size-1) + 1 : 0; // number of segments to store existing items: 0=>0; 1,2=>1; 3,4=>2; [5-8]=>3;..
+ const segment_index_t first_block = my_first_block; // number of merged segments, getting values from atomics
segment_index_t k = first_block;
if(k_stop < first_block)
@@ -341,7 +357,7 @@ void *concurrent_vector_base_v3::internal_compact( size_type element_size, void
internal_segments_table &old = *static_cast<internal_segments_table*>( table );
memset(&old, 0, sizeof(old));
- if ( k != first_block ) // first segment optimization
+ if ( k != first_block && k ) // first segment optimization
{
// exception can occur here
void *seg = old.table[0] = helper::allocate_segment( *this, segment_size(k) );
@@ -375,8 +391,10 @@ void *concurrent_vector_base_v3::internal_compact( size_type element_size, void
}
// free unnecessary segments allocated by reserve() call
if ( k_stop < k_end ) {
+ old.first_block = first_block;
memcpy(old.table+k_stop, segment_table+k_stop, (k_end-k_stop) * sizeof(segment_t));
memset(segment_table+k_stop, 0, (k_end-k_stop) * sizeof(segment_t));
+ if( !k ) my_first_block = 0;
}
return table;
}
@@ -406,7 +424,6 @@ void concurrent_vector_base_v3::internal_swap(concurrent_vector_base_v3& v)
my_early_size = v_sz; v.my_early_size = my_sz;
}
-
} // namespace internal
} // tbb
diff --git a/src/tbb/em64t-masm/atomic_support.asm b/src/tbb/em64t-masm/atomic_support.asm
index c407248..86a2408 100644
--- a/src/tbb/em64t-masm/atomic_support.asm
+++ b/src/tbb/em64t-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
diff --git a/src/tbb/gate.h b/src/tbb/gate.h
index 3de446f..3b39624 100644
--- a/src/tbb/gate.h
+++ b/src/tbb/gate.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,21 +29,13 @@
#ifndef _TBB_Gate_H
#define _TBB_Gate_H
+#include "itt_notify.h"
+
namespace tbb {
namespace internal {
-#if NO_GATE
-
-//! Dummy implementation for experiments
-class Gate {
-public:
- void open() {}
- void close() {}
- void wait() {}
-};
-
-#elif __TBB_USE_FUTEX
+#if __TBB_USE_FUTEX
//! Implementation of Gate based on futex.
/** Use this futex-based implementation where possible, because it is the simplest and usually fastest. */
@@ -51,6 +43,10 @@ class Gate {
public:
typedef intptr_t state_t;
+ Gate() {
+ ITT_SYNC_CREATE(&state, SyncType_Scheduler, SyncObj_Gate);
+ }
+
//! Get current state of gate
state_t get_state() const {
return state;
@@ -58,12 +54,23 @@ public:
//! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
void try_update( intptr_t value, intptr_t comparand, bool flip=false ) {
__TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+retry:
state_t old_state = state;
// First test for condition without using atomic operation
if( flip ? old_state!=comparand : old_state==comparand ) {
// Now atomically retest condition and set.
- if( state.compare_and_swap( value, old_state )==old_state && value!=0 )
- futex_wakeup_all( &state ); // Update was successful and new state is not SNAPSHOT_EMPTY
+ state_t s = state.compare_and_swap( value, old_state );
+ if( s==old_state ) {
+ // compare_and_swap succeeded
+ if( value!=0 )
+ futex_wakeup_all( &state ); // Update was successful and new state is not SNAPSHOT_EMPTY
+ } else {
+ // compare_and_swap failed. But for != case, failure may be spurious for our purposes if
+ // the value there is nonetheless not equal to value. This is a fairly rare event, so
+ // there is no need for backoff. In event of such a failure, we must retry.
+ if( flip && s!=value )
+ goto retry;
+ }
}
}
//! Wait for state!=0.
@@ -92,6 +99,8 @@ public:
{
event = CreateEvent( NULL, true, false, NULL );
InitializeCriticalSection( &critical_section );
+ ITT_SYNC_CREATE(event, SyncType_Scheduler, SyncObj_Gate);
+ ITT_SYNC_CREATE(&critical_section, SyncType_Scheduler, SyncObj_GateLock);
}
~Gate() {
CloseHandle( event );
@@ -135,11 +144,12 @@ private:
pthread_cond_t cond;
public:
//! Initialize with count=0
- Gate() :
- state(0)
+ Gate() : state(0)
{
pthread_mutex_init( &mutex, NULL );
pthread_cond_init( &cond, NULL);
+ ITT_SYNC_CREATE(&cond, SyncType_Scheduler, SyncObj_Gate);
+ ITT_SYNC_CREATE(&mutex, SyncType_Scheduler, SyncObj_GateLock);
}
~Gate() {
pthread_cond_destroy( &cond );
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
index 030987b..e22bc1c 100644
--- a/src/tbb/ia32-masm/atomic_support.asm
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
diff --git a/src/tbb/ia32-masm/lock_byte.asm b/src/tbb/ia32-masm/lock_byte.asm
index 5f7c305..4f560c4 100644
--- a/src/tbb/ia32-masm/lock_byte.asm
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
diff --git a/src/tbb/ibm_aix51/atomic_support.c b/src/tbb/ibm_aix51/atomic_support.c
index caa8fb1..2e052d7 100644
--- a/src/tbb/ibm_aix51/atomic_support.c
+++ b/src/tbb/ibm_aix51/atomic_support.c
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/tbb/itanium-gas/atomic_support.s b/src/tbb/itanium-gas/atomic_support.s
index 3370b27..1750289 100644
--- a/src/tbb/itanium-gas/atomic_support.s
+++ b/src/tbb/itanium-gas/atomic_support.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/src/tbb/itanium-gas/lock_byte.s b/src/tbb/itanium-gas/lock_byte.s
index 582dcca..e7f199d 100644
--- a/src/tbb/itanium-gas/lock_byte.s
+++ b/src/tbb/itanium-gas/lock_byte.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/src/tbb/itanium-gas/log2.s b/src/tbb/itanium-gas/log2.s
index 197486d..2a42888 100644
--- a/src/tbb/itanium-gas/log2.s
+++ b/src/tbb/itanium-gas/log2.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/src/tbb/itanium-gas/pause.s b/src/tbb/itanium-gas/pause.s
index 1bab620..bead89b 100644
--- a/src/tbb/itanium-gas/pause.s
+++ b/src/tbb/itanium-gas/pause.s
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
diff --git a/src/tbb/itt_notify.cpp b/src/tbb/itt_notify.cpp
index fdbe4a1..f6901c5 100644
--- a/src/tbb/itt_notify.cpp
+++ b/src/tbb/itt_notify.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,9 +31,8 @@
#endif
#include "itt_notify.h"
#include "tbb_misc.h"
-#include <stdlib.h>
-#include <string.h>
#include "tbb/tbb_machine.h"
+#include "tbb/cache_aligned_allocator.h" /* NFS_MaxLineSize */
#if _WIN32||_WIN64
#include <windows.h>
@@ -45,12 +44,22 @@
#pragma weak __itt_notify_sync_releasing
#pragma weak __itt_notify_sync_cancel
#pragma weak __itt_thr_name_set
+ #pragma weak __itt_thread_set_name
+#if __TBB_NAMING_API_SUPPORT
+ #pragma weak __itt_sync_create
+ #pragma weak __itt_sync_rename
+#endif /* __TBB_NAMING_API_SUPPORT */
extern "C" {
void __itt_notify_sync_prepare(void *p);
void __itt_notify_sync_cancel(void *p);
void __itt_notify_sync_acquired(void *p);
void __itt_notify_sync_releasing(void *p);
int __itt_thr_name_set (void* p, int len);
+ void __itt_thread_set_name (const char* name);
+#if __TBB_NAMING_API_SUPPORT
+ void __itt_sync_create( void* obj, const char* name, const char* type, int attribute );
+ void __itt_sync_rename( void* obj, const char* new_name );
+#endif /* __TBB_NAMING_API_SUPPORT */
}
#endif /* __TBB_WEAK_SYMBOLS */
#endif /* !WIN */
@@ -67,89 +76,162 @@ static const DynamicLinkDescriptor ITT_HandlerTable[] = {
DLD( __itt_notify_sync_releasing, ITT_Handler_sync_releasing),
DLD( __itt_notify_sync_cancel, ITT_Handler_sync_cancel),
# if _WIN32||_WIN64
-# ifdef UNICODE
DLD( __itt_thr_name_setW, ITT_Handler_thr_name_set),
-# else
- DLD( __itt_thr_name_setA, ITT_Handler_thr_name_set),
-# endif /* UNICODE */
+ DLD( __itt_thread_set_nameW, ITT_Handler_thread_set_name),
# else
DLD( __itt_thr_name_set, ITT_Handler_thr_name_set),
+ DLD( __itt_thread_set_name, ITT_Handler_thread_set_name),
# endif /* _WIN32 || _WIN64 */
+
+#if __TBB_NAMING_API_SUPPORT
+# if _WIN32||_WIN64
+ DLD( __itt_sync_createW, ITT_Handler_sync_create),
+ DLD( __itt_sync_renameW, ITT_Handler_sync_rename)
+# else
+ DLD( __itt_sync_create, ITT_Handler_sync_create),
+ DLD( __itt_sync_rename, ITT_Handler_sync_rename)
+# endif
+#endif /* __TBB_NAMING_API_SUPPORT */
};
+static const int ITT_HandlerTable_size =
+ sizeof(ITT_HandlerTable)/sizeof(DynamicLinkDescriptor);
+
// LIBITTNOTIFY_NAME is the name of the ITT notification library
# if _WIN32||_WIN64
# define LIBITTNOTIFY_NAME "libittnotify.dll"
-# elif __linux__ || __FreeBSD__ || __sun
+# elif __linux__
# define LIBITTNOTIFY_NAME "libittnotify.so"
-# elif __APPLE__
-# define LIBITTNOTIFY_NAME "libittnotify.dylib"
# else
-# error Unknown OS
+# error Intel(R) Threading Tools not provided for this OS
# endif
-/** Caller is responsible for ensuring this routine is called exactly once. */
+//! Performs tools support initialization.
+/** Is called by DoOneTimeInitializations and ITT_DoOneTimeInitialization in
+ a protected (one-time) manner. Not to be invoked directly. **/
bool InitializeITT() {
bool result = false;
- // Check if we are running under control of VTune.
- if( GetBoolEnvironmentVariable("KMP_FOR_TCHECK") || GetBoolEnvironmentVariable("KMP_FOR_TPROFILE") ) {
- // Yes, we are under control of VTune. Check for libittnotify library.
- result = FillDynamicLinks( LIBITTNOTIFY_NAME, ITT_HandlerTable, 5 );
+ // Check if we are running under a performance or correctness tool
+ bool t_checker = GetBoolEnvironmentVariable("KMP_FOR_TCHECK");
+ bool t_profiler = GetBoolEnvironmentVariable("KMP_FOR_TPROFILE");
+ __TBB_ASSERT(!(t_checker&&t_profiler), NULL);
+ if ( t_checker || t_profiler ) {
+ // Yes, we are in the tool mode. Try to load libittnotify library.
+ result = FillDynamicLinks( LIBITTNOTIFY_NAME, ITT_HandlerTable, ITT_HandlerTable_size, 4 );
}
- if (!result){
- for (int i = 0; i < 5; i++)
+ if (result){
+ if ( t_checker ) {
+ current_tool = ITC;
+ } else if ( t_profiler ) {
+ current_tool = ITP;
+ }
+ } else {
+ // Clear away the proxy (dummy) handlers
+ for (int i = 0; i < ITT_HandlerTable_size; i++)
*ITT_HandlerTable[i].handler = NULL;
+ current_tool = NONE;
}
PrintExtraVersionInfo( "ITT", result?"yes":"no" );
return result;
}
-//! Defined in task.cpp
-extern void DoOneTimeInitializations();
+#if !__TBB_NAMING_API_SUPPORT
+ #define ITT_DoOneTimeInitialization DoOneTimeInitializations
+#endif
+
+//! Performs one-time initialization of tools interoperability mechanisms.
+/** Defined in task.cpp. Makes a protected do-once call to InitializeITT(). **/
+void ITT_DoOneTimeInitialization();
-//! Executed on very first call throught ITT_Handler_sync_prepare
+/** The following dummy_xxx functions are proxies that correspond to tool notification
+ APIs and are used to initialize corresponding pointers to the tool notifications
+ (ITT_Handler_xxx). When the first call to ITT_Handler_xxx takes place before
+ the whole library initialization (done by DoOneTimeInitializations) happened,
+ the proxy handler performs initialization of the tools support. After this
+ ITT_Handler_xxx will be set to either tool notification pointer or NULL. **/
void dummy_sync_prepare( volatile void* ptr ) {
- DoOneTimeInitializations();
+ ITT_DoOneTimeInitialization();
__TBB_ASSERT( ITT_Handler_sync_prepare!=&dummy_sync_prepare, NULL );
if (ITT_Handler_sync_prepare)
(*ITT_Handler_sync_prepare) (ptr);
}
-//! Executed on very first call throught ITT_Handler_sync_acquired
void dummy_sync_acquired( volatile void* ptr ) {
- DoOneTimeInitializations();
+ ITT_DoOneTimeInitialization();
__TBB_ASSERT( ITT_Handler_sync_acquired!=&dummy_sync_acquired, NULL );
if (ITT_Handler_sync_acquired)
(*ITT_Handler_sync_acquired) (ptr);
}
-//! Executed on very first call throught ITT_Handler_sync_releasing
void dummy_sync_releasing( volatile void* ptr ) {
- DoOneTimeInitializations();
+ ITT_DoOneTimeInitialization();
__TBB_ASSERT( ITT_Handler_sync_releasing!=&dummy_sync_releasing, NULL );
if (ITT_Handler_sync_releasing)
(*ITT_Handler_sync_releasing) (ptr);
}
-//! Executed on very first call throught ITT_Handler_sync_cancel
void dummy_sync_cancel( volatile void* ptr ) {
- DoOneTimeInitializations();
- __TBB_ASSERT( ITT_Handler_sync_releasing!=&dummy_sync_cancel, NULL );
+ ITT_DoOneTimeInitialization();
+ __TBB_ASSERT( ITT_Handler_sync_cancel!=&dummy_sync_cancel, NULL );
if (ITT_Handler_sync_cancel)
(*ITT_Handler_sync_cancel) (ptr);
}
-//! Executed on very first call throught ITT_Handler_thr_name_set
-int dummy_thr_name_set( const char* str, int number ) {
- DoOneTimeInitializations();
+int dummy_thr_name_set( const tchar* str, int number ) {
+ ITT_DoOneTimeInitialization();
__TBB_ASSERT( ITT_Handler_thr_name_set!=&dummy_thr_name_set, NULL );
if (ITT_Handler_thr_name_set)
return (*ITT_Handler_thr_name_set) (str, number);
- else{// ITT_Handler_thr_name_set is NULL. It means that ITT support is disabled.
- return -1;
- }
+ return -1;
+}
+
+void dummy_thread_set_name( const tchar* name ) {
+ ITT_DoOneTimeInitialization();
+ __TBB_ASSERT( ITT_Handler_thread_set_name!=&dummy_thread_set_name, NULL );
+ if (ITT_Handler_thread_set_name)
+ (*ITT_Handler_thread_set_name)( name );
+}
+
+#if __TBB_NAMING_API_SUPPORT
+void dummy_sync_create( void* obj, const tchar* objname, const tchar* objtype, int /*attribute*/ ) {
+ ITT_DoOneTimeInitialization();
+ __TBB_ASSERT( ITT_Handler_sync_create!=&dummy_sync_create, NULL );
+ ITT_SYNC_CREATE( obj, objtype, objname );
+}
+
+void dummy_sync_rename( void* obj, const tchar* new_name ) {
+ ITT_DoOneTimeInitialization();
+ __TBB_ASSERT( ITT_Handler_sync_rename!=&dummy_sync_rename, NULL );
+ ITT_SYNC_RENAME(obj, new_name);
}
+#endif /* __TBB_NAMING_API_SUPPORT */
+
+//! Leading padding before the area where tool notification handlers are placed.
+/** Prevents cache lines where the handler pointers are stored from thrashing.
+ Defined as extern to prevent compiler from placing the padding arrays separately
+ from the handler pointers (which are declared as extern).
+ Declared separately from definition to get rid of compiler warnings. **/
+extern char __ITT_Handler_leading_padding[NFS_MaxLineSize];
+
+//! Trailing padding after the area where tool notification handlers are placed.
+extern char __ITT_Handler_trailing_padding[NFS_MaxLineSize];
+
+char __ITT_Handler_leading_padding[NFS_MaxLineSize] = {0};
+PointerToITT_Handler ITT_Handler_sync_prepare = &dummy_sync_prepare;
+PointerToITT_Handler ITT_Handler_sync_acquired = &dummy_sync_acquired;
+PointerToITT_Handler ITT_Handler_sync_releasing = &dummy_sync_releasing;
+PointerToITT_Handler ITT_Handler_sync_cancel = &dummy_sync_cancel;
+PointerToITT_thr_name_set ITT_Handler_thr_name_set = &dummy_thr_name_set;
+PointerToITT_thread_set_name ITT_Handler_thread_set_name = &dummy_thread_set_name;
+#if __TBB_NAMING_API_SUPPORT
+PointerToITT_sync_create ITT_Handler_sync_create = &dummy_sync_create;
+PointerToITT_sync_rename ITT_Handler_sync_rename = &dummy_sync_rename;
+#endif /* __TBB_NAMING_API_SUPPORT */
+char __ITT_Handler_trailing_padding[NFS_MaxLineSize] = {0};
+
+target_tool current_tool = TO_BE_INITIALIZED;
+
#endif /* DO_ITT_NOTIFY */
void itt_store_pointer_with_release_v3( void* dst, void* src ) {
@@ -163,6 +245,20 @@ void* itt_load_pointer_with_acquire_v3( const void* src ) {
return result;
}
+void* itt_load_pointer_v3( const void* src ) {
+ void* result = *static_cast<void*const*>(src);
+ return result;
+}
+
+#if __TBB_NAMING_API_SUPPORT
+void itt_set_sync_name_v3( void *obj, const tchar* name) {
+#if DO_ITT_NOTIFY
+ __TBB_ASSERT( ITT_Handler_sync_rename!=&dummy_sync_rename, NULL );
+#endif
+ ITT_SYNC_RENAME(obj, name);
+}
+#endif /* __TBB_NAMING_API_SUPPORT */
+
} // namespace internal
} // namespace tbb
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
index b004e34..5de6146 100644
--- a/src/tbb/itt_notify.h
+++ b/src/tbb/itt_notify.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,6 +29,8 @@
#ifndef _TBB_ITT_NOTIFY
#define _TBB_ITT_NOTIFY
+#include "tbb/tbb_stddef.h"
+
// IMPORTANT: To use itt_notify.cpp/itt_notify.h in a library, exactly
// one of the files that #includes itt_notify.h should have
// #define INSTANTIATE_ITT_NOTIFY 1
@@ -38,73 +40,138 @@
// The intent is to allow precise placement of the hooks. Ideally, they
// should reside on a hot mostly-read cache line.
-#if DO_ITT_NOTIFY
-
namespace tbb {
-namespace internal {
-
-//! Initialize support for __itt_notify handlers
-/** It is the callers responsibility to ensure that this routine is called only once.
- Returns true if ITT hooks were installed; false otherwise. */
-bool InitializeITT();
+//! Unicode support
+#if _WIN32||_WIN64
+ //! Unicode character type. Always wchar_t on Windows.
+ /** We do not use typedefs from Windows TCHAR family to keep consistence of TBB coding style. **/
+ typedef wchar_t tchar;
+ //! Standard Windows macro to markup the string literals.
+ #define _T(string_literal) L ## string_literal
+ #define tstrlen wcslen
+#else /* !WIN */
+ typedef char tchar;
+ //! Standard Windows style macro to markup the string literals.
+ #define _T(string_literal) string_literal
+ #define tstrlen strlen
+#endif /* !WIN */
-//! A pointer to a __itt_notify call.
-typedef void (*PointerToITT_Handler)(volatile void*);
+} // namespace tbb
-//! A pointer to __itt_thr_set_name call.
-typedef int (*PointerToITT_Name_Set)(const char*, int);
+#if DO_ITT_NOTIFY
-//! Dummy routine used for first indirect call via ITT_Handler_sync_prepare
-void dummy_sync_prepare(volatile void*);
+namespace tbb {
-//! Dummy routine used for first indirect call via ITT_Handler_sync_acquired.
-void dummy_sync_acquired(volatile void*);
+//! Identifies performance and correctness tools, which TBB sends special notifications to.
+/** Enumerators must be ORable bit values.
+
+ Initializing global tool indicator with TO_BE_INITIALIZED is required
+ to avoid bypassing early notification calls made through targeted macros until
+ initialization is performed from somewhere else.
+
+ Yet this entails another problem. The first targeted calls that happen to go
+ into the proxy (dummy) handlers become promiscuous. **/
+enum target_tool {
+ NONE = 0ul,
+ ITC = 1ul,
+ ITP = 2ul,
+ TO_BE_INITIALIZED = ~0ul
+};
+
+#if __TBB_NAMING_API_SUPPORT
+ //! Display names of internal synchronization types
+ extern const tchar
+ *SyncType_GlobalLock,
+ *SyncType_Scheduler;
+ //! Display names of internal synchronization components/scenarios
+ extern const tchar
+ *SyncObj_LibraryInitialization,
+ *SyncObj_SchedulerInitialization,
+ *SyncObj_SchedulersList,
+ *SyncObj_TaskStealingLoop,
+ *SyncObj_WorkerTaskPool,
+ *SyncObj_MasterTaskPool,
+ *SyncObj_GateLock,
+ *SyncObj_Gate,
+ *SyncObj_SchedulerTermination,
+ *SyncObj_ContextsList
+ ;
+#endif /* __TBB_NAMING_API_SUPPORT */
-//! Dummy routine used for first indirect call via ITT_Handler_sync_releasing.
-void dummy_sync_releasing(volatile void*);
+namespace internal {
-//! Dummy routine used for first indirect call via ITT_Handler_sync_cancel.
-void dummy_sync_cancel(volatile void*);
+//! Types of the tool notification functions (and corresponding proxy handlers).
+typedef void (*PointerToITT_Handler)(volatile void*);
+typedef int (*PointerToITT_thr_name_set)(const tchar*, int);
+typedef void (*PointerToITT_thread_set_name)(const tchar*);
-//! Dummy routine used for first indirect call via ITT_Handler_thr_name_set.
-int dummy_thr_name_set(const char*, int);
+#if __TBB_NAMING_API_SUPPORT
+typedef void (*PointerToITT_sync_create)(void* obj, const tchar* type, const tchar* name, int attribute);
+typedef void (*PointerToITT_sync_rename)(void* obj, const tchar* new_name);
-#if INSTANTIATE_ITT_NOTIFY
-PointerToITT_Handler ITT_Handler_sync_prepare = &dummy_sync_prepare;
-PointerToITT_Handler ITT_Handler_sync_acquired = &dummy_sync_acquired;
-PointerToITT_Handler ITT_Handler_sync_releasing = &dummy_sync_releasing;
-PointerToITT_Handler ITT_Handler_sync_cancel = &dummy_sync_cancel;
-PointerToITT_Name_Set ITT_Handler_thr_name_set = &dummy_thr_name_set;
+#if _WIN32||_WIN64
+void itt_set_sync_name_v3( void* obj, const wchar_t* src );
#else
+void itt_set_sync_name_v3( void* obj, const char* name);
+#endif
+#endif /* __TBB_NAMING_API_SUPPORT */
+
extern PointerToITT_Handler ITT_Handler_sync_prepare;
extern PointerToITT_Handler ITT_Handler_sync_acquired;
extern PointerToITT_Handler ITT_Handler_sync_releasing;
extern PointerToITT_Handler ITT_Handler_sync_cancel;
-extern PointerToITT_Name_Set ITT_Handler_thr_name_set;
-#endif
+extern PointerToITT_thr_name_set ITT_Handler_thr_name_set;
+extern PointerToITT_thread_set_name ITT_Handler_thread_set_name;
+#if __TBB_NAMING_API_SUPPORT
+extern PointerToITT_sync_create ITT_Handler_sync_create;
+extern PointerToITT_sync_rename ITT_Handler_sync_rename;
+#endif /* __TBB_NAMING_API_SUPPORT */
+
+extern target_tool current_tool;
} // namespace internal
} // namespace tbb
//! Glues two tokens together.
-#define ITT_GLUE(x,y) tbb::internal::x##y
+#define ITT_HANDLER(name) tbb::internal::ITT_Handler_##name
+#define CALL_ITT_HANDLER(name, arglist) ( ITT_HANDLER(name) ? (void)ITT_HANDLER(name)arglist : (void)0 )
//! Call routine itt_notify_(name) if corresponding handler is available.
/** For example, use ITT_NOTIFY(sync_releasing,x) to invoke __itt_notify_sync_releasing(x).
Ordinarily, preprocessor token gluing games should be avoided.
But here, it seemed to be the best way to handle the issue. */
-#define ITT_NOTIFY(name,pointer) ( ITT_GLUE(ITT_Handler_,name) ? ITT_GLUE(ITT_Handler_,name)(pointer) : (void)0 )
+#define ITT_NOTIFY(name,obj) CALL_ITT_HANDLER(name,(obj))
+//! The same as ITT_NOTIFY but also checks if we are running under appropriate tool.
+/** Parameter tools is an ORed set of target_tool enumerators. **/
+#define ITT_NOTIFY_TOOL(tools,name,obj) ( ITT_HANDLER(name) && ((tools) & tbb::internal::current_tool) ? ITT_HANDLER(name)(obj) : (void)0 )
-#define ITT_NAME_SET(name,pointer,length) ( ITT_GLUE(ITT_Handler_,name) ? ITT_GLUE(ITT_Handler_,name)(pointer,length) : 0 )
+#define ITT_THREAD_SET_NAME(name) ( \
+ ITT_HANDLER(thread_set_name) ? ITT_HANDLER(thread_set_name)(name) \
+ : CALL_ITT_HANDLER(thr_name_set,(name, tstrlen(name))) )
-#else
+#if __TBB_NAMING_API_SUPPORT
+
+/** 2 is the value of __itt_attr_mutex attribute. **/
+#define ITT_SYNC_CREATE(obj, type, name) CALL_ITT_HANDLER(sync_create,(obj, type, name, 2))
+#define ITT_SYNC_RENAME(obj, name) CALL_ITT_HANDLER(sync_rename,(obj, name))
+
+#else /* !__TBB_NAMING_API_SUPPORT */
+
+#define ITT_SYNC_CREATE(obj, type, name) ((void)0)
+#define ITT_SYNC_RENAME(obj, name) ((void)0)
+
+#endif /* !__TBB_NAMING_API_SUPPORT */
+
+#else /* !DO_ITT_NOTIFY */
+
+#define ITT_NOTIFY(name,obj) ((void)0)
+#define ITT_NOTIFY_TOOL(tools,name,obj) ((void)0)
+#define ITT_THREAD_SET_NAME(name) ((void)0)
+#define ITT_SYNC_CREATE(obj, type, name) ((void)0)
+#define ITT_SYNC_RENAME(obj, name) ((void)0)
-#define ITT_NOTIFY(name,pointer) ((void)0)
-
-#define ITT_NAME_SET(name,pointer,length) ((void)0)
-
#endif /* DO_ITT_NOTIFY */
#if DO_ITT_QUIET
diff --git a/src/tbb/lin32-tbb-export.def b/src/tbb/lin32-tbb-export.def
index a09bfa6..ee00565 100644
--- a/src/tbb/lin32-tbb-export.def
+++ b/src/tbb/lin32-tbb-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -107,11 +107,15 @@ _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
_ZN3tbb8internal13handle_perrorEiPKc;
_ZN3tbb8internal15runtime_warningEPKcz;
+__TBB_machine_store8_slow_perf_warning;
__TBB_machine_store8_slow;
+TBB_runtime_interface_version;
/* itt_notify.cpp */
_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
/* pipeline.cpp */
_ZTIN3tbb6filterE;
@@ -122,6 +126,7 @@ _ZN3tbb8pipeline10add_filterERNS_6filterE;
_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
_ZN3tbb8pipeline13remove_filterERNS_6filterE;
_ZN3tbb8pipeline3runEj;
+_ZN3tbb8pipeline3runEjRNS_18task_group_contextE;
_ZN3tbb8pipeline5clearEv;
_ZTIN3tbb8pipelineE;
_ZTSN3tbb8pipelineE;
@@ -133,6 +138,7 @@ _ZN3tbb8pipelineD1Ev;
_ZN3tbb8pipelineD2Ev;
/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
@@ -153,6 +159,7 @@ _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
#endif
/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
@@ -163,6 +170,7 @@ _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
/* spin_mutex.cpp */
+_ZN3tbb10spin_mutex18internal_constructEv;
_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
@@ -182,6 +190,7 @@ _ZN3tbb15recursive_mutex16internal_destroyEv;
_ZN3tbb15recursive_mutex18internal_constructEv;
/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
@@ -231,6 +240,7 @@ _ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEij;
_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
_ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
#if !TBB_NO_LEGACY
/* concurrent_vector.cpp v2 */
diff --git a/src/tbb/lin64-tbb-export.def b/src/tbb/lin64-tbb-export.def
index 017fd97..a9d93a1 100644
--- a/src/tbb/lin64-tbb-export.def
+++ b/src/tbb/lin64-tbb-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -107,10 +107,13 @@ _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
_ZN3tbb8internal13handle_perrorEiPKc;
_ZN3tbb8internal15runtime_warningEPKcz;
+TBB_runtime_interface_version;
/* itt_notify.cpp */
_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
/* pipeline.cpp */
_ZTIN3tbb6filterE;
@@ -121,6 +124,7 @@ _ZN3tbb8pipeline10add_filterERNS_6filterE;
_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
_ZN3tbb8pipeline13remove_filterERNS_6filterE;
_ZN3tbb8pipeline3runEm;
+_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
_ZN3tbb8pipeline5clearEv;
_ZTIN3tbb8pipelineE;
_ZTSN3tbb8pipelineE;
@@ -132,6 +136,7 @@ _ZN3tbb8pipelineD1Ev;
_ZN3tbb8pipelineD2Ev;
/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
@@ -152,6 +157,7 @@ _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
#endif
/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
@@ -165,6 +171,7 @@ _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
+_ZN3tbb10spin_mutex18internal_constructEv;
/* mutex.cpp */
_ZN3tbb5mutex11scoped_lock16internal_acquireERS0_;
@@ -181,6 +188,7 @@ _ZN3tbb15recursive_mutex16internal_destroyEv;
_ZN3tbb15recursive_mutex18internal_constructEv;
/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
@@ -230,6 +238,7 @@ _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
#if !TBB_NO_LEGACY
/* concurrent_vector.cpp v2 */
diff --git a/src/tbb/lin64ipf-tbb-export.def b/src/tbb/lin64ipf-tbb-export.def
index ad17ead..5589dad 100644
--- a/src/tbb/lin64ipf-tbb-export.def
+++ b/src/tbb/lin64ipf-tbb-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -107,10 +107,13 @@ _ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E;
_ZN3tbb8internal36get_initial_auto_partitioner_divisorEv;
_ZN3tbb8internal13handle_perrorEiPKc;
_ZN3tbb8internal15runtime_warningEPKcz;
+TBB_runtime_interface_version;
/* itt_notify.cpp */
_ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv;
_ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_;
+_ZN3tbb8internal20itt_set_sync_name_v3EPvPKc;
+_ZN3tbb8internal19itt_load_pointer_v3EPKv;
/* pipeline.cpp */
_ZTIN3tbb6filterE;
@@ -121,6 +124,7 @@ _ZN3tbb8pipeline10add_filterERNS_6filterE;
_ZN3tbb8pipeline12inject_tokenERNS_4taskE;
_ZN3tbb8pipeline13remove_filterERNS_6filterE;
_ZN3tbb8pipeline3runEm;
+_ZN3tbb8pipeline3runEmRNS_18task_group_contextE;
_ZN3tbb8pipeline5clearEv;
_ZTIN3tbb8pipelineE;
_ZTSN3tbb8pipelineE;
@@ -132,6 +136,7 @@ _ZN3tbb8pipelineD1Ev;
_ZN3tbb8pipelineD2Ev;
/* queuing_rw_mutex.cpp */
+_ZN3tbb16queuing_rw_mutex18internal_constructEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv;
_ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b;
@@ -152,6 +157,7 @@ _ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_;
#endif
/* spin_rw_mutex v3 */
+_ZN3tbb16spin_rw_mutex_v318internal_constructEv;
_ZN3tbb16spin_rw_mutex_v316internal_upgradeEv;
_ZN3tbb16spin_rw_mutex_v318internal_downgradeEv;
_ZN3tbb16spin_rw_mutex_v323internal_acquire_readerEv;
@@ -162,6 +168,7 @@ _ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv;
_ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv;
/* spin_mutex.cpp */
+_ZN3tbb10spin_mutex18internal_constructEv;
_ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_;
_ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv;
_ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_;
@@ -181,6 +188,7 @@ _ZN3tbb15recursive_mutex16internal_destroyEv;
_ZN3tbb15recursive_mutex18internal_constructEv;
/* QueuingMutex.cpp */
+_ZN3tbb13queuing_mutex18internal_constructEv;
_ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_;
_ZN3tbb13queuing_mutex11scoped_lock7releaseEv;
_ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_;
@@ -230,6 +238,7 @@ _ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv;
_ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm;
_ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv;
_ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv;
+_ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_;
#if !TBB_NO_LEGACY
/* concurrent_vector.cpp v2 */
diff --git a/src/tbb/mac32-tbb-export.def b/src/tbb/mac32-tbb-export.def
index 25ec660..40d0904 100644
--- a/src/tbb/mac32-tbb-export.def
+++ b/src/tbb/mac32-tbb-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -112,11 +112,15 @@ __ZN3tbb17assertion_failureEPKciS1_S1_
__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
__ZN3tbb8internal13handle_perrorEiPKc
__ZN3tbb8internal15runtime_warningEPKcz
+___TBB_machine_store8_slow_perf_warning
___TBB_machine_store8_slow
+_TBB_runtime_interface_version
# itt_notify.cpp
__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
+__ZN3tbb8internal19itt_load_pointer_v3EPKv
+__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
# pipeline.cpp
__ZTIN3tbb6filterE
@@ -127,6 +131,7 @@ __ZN3tbb8pipeline10add_filterERNS_6filterE
__ZN3tbb8pipeline12inject_tokenERNS_4taskE
__ZN3tbb8pipeline13remove_filterERNS_6filterE
__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
__ZN3tbb8pipeline5clearEv
__ZN3tbb8pipelineC1Ev
__ZN3tbb8pipelineC2Ev
@@ -143,6 +148,7 @@ __ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+__ZN3tbb16queuing_rw_mutex18internal_constructEv
#if !TBB_NO_LEGACY
# spin_rw_mutex.cpp v2
@@ -166,11 +172,13 @@ __ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v318internal_constructEv
# spin_mutex.cpp
__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb10spin_mutex18internal_constructEv
# mutex.cpp
__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
@@ -190,6 +198,7 @@ __ZN3tbb15recursive_mutex18internal_constructEv
__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+__ZN3tbb13queuing_mutex18internal_constructEv
# concurrent_hash_map
__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
@@ -236,6 +245,7 @@ __ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityEim
__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
__ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
+__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
#if !TBB_NO_LEGACY
# concurrent_vector.cpp v2
diff --git a/src/tbb/mac64-tbb-export.def b/src/tbb/mac64-tbb-export.def
index bebbb23..731e488 100644
--- a/src/tbb/mac64-tbb-export.def
+++ b/src/tbb/mac64-tbb-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -112,10 +112,13 @@ __ZN3tbb17assertion_failureEPKciS1_S1_
__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
__ZN3tbb8internal13handle_perrorEiPKc
__ZN3tbb8internal15runtime_warningEPKcz
+_TBB_runtime_interface_version
# itt_notify.cpp
__ZN3tbb8internal32itt_load_pointer_with_acquire_v3EPKv
__ZN3tbb8internal33itt_store_pointer_with_release_v3EPvS1_
+__ZN3tbb8internal19itt_load_pointer_v3EPKv
+__ZN3tbb8internal20itt_set_sync_name_v3EPvPKc
# pipeline.cpp
__ZTIN3tbb6filterE
@@ -126,6 +129,7 @@ __ZN3tbb8pipeline10add_filterERNS_6filterE
__ZN3tbb8pipeline12inject_tokenERNS_4taskE
__ZN3tbb8pipeline13remove_filterERNS_6filterE
__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline3runEmRNS_18task_group_contextE
__ZN3tbb8pipeline5clearEv
__ZN3tbb8pipelineC1Ev
__ZN3tbb8pipelineC2Ev
@@ -142,6 +146,7 @@ __ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+__ZN3tbb16queuing_rw_mutex18internal_constructEv
#if !TBB_NO_LEGACY
# spin_rw_mutex.cpp v2
@@ -165,11 +170,13 @@ __ZN3tbb16spin_rw_mutex_v323internal_release_readerEv
__ZN3tbb16spin_rw_mutex_v323internal_release_writerEv
__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_readerEv
__ZN3tbb16spin_rw_mutex_v327internal_try_acquire_writerEv
+__ZN3tbb16spin_rw_mutex_v318internal_constructEv
# spin_mutex.cpp
__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb10spin_mutex18internal_constructEv
# mutex.cpp
__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
@@ -189,6 +196,7 @@ __ZN3tbb15recursive_mutex18internal_constructEv
__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+__ZN3tbb13queuing_mutex18internal_constructEv
# concurrent_hash_map
__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
@@ -235,6 +243,7 @@ __ZN3tbb8internal24concurrent_queue_base_v321internal_finish_clearEv
__ZN3tbb8internal24concurrent_queue_base_v321internal_set_capacityElm
__ZNK3tbb8internal24concurrent_queue_base_v313internal_sizeEv
__ZNK3tbb8internal24concurrent_queue_base_v324internal_throw_exceptionEv
+__ZN3tbb8internal24concurrent_queue_base_v36assignERKS1_
#if !TBB_NO_LEGACY
# concurrent_vector.cpp v2
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
index 75daf4d..3c619b6 100644
--- a/src/tbb/mutex.cpp
+++ b/src/tbb/mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,6 +27,7 @@
*/
#include "tbb/mutex.h"
+#include "itt_notify.h"
namespace tbb {
void mutex::scoped_lock::internal_acquire( mutex& m ) {
@@ -121,6 +122,7 @@ void mutex::internal_construct() {
if( error_code )
tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
#endif /* _WIN32||_WIN64*/
+ ITT_SYNC_CREATE(&impl, _T("tbb::mutex"), _T(""));
}
void mutex::internal_destroy() {
diff --git a/src/tbb/pipeline.cpp b/src/tbb/pipeline.cpp
index d1912fc..4c1d9f8 100644
--- a/src/tbb/pipeline.cpp
+++ b/src/tbb/pipeline.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -31,19 +31,25 @@
#include "tbb/cache_aligned_allocator.h"
#include "itt_notify.h"
-
namespace tbb {
namespace internal {
+//! This structure is used to store task information in ordered buffer
+struct task_info{
+ void* my_object;
+ Token my_token;
+ bool my_token_ready;
+ bool is_valid;
+};
+
//! A buffer of ordered items.
/** Each item is a task, inserted into a position in the buffer corrsponding to a Token. */
class ordered_buffer {
typedef Token size_type;
//! Array of deferred tasks that cannot yet start executing.
- /** Element is NULL if unused. */
- task** array;
+ task_info* array;
//! Size of array
/** Always 0 or a power of 2 */
@@ -63,9 +69,16 @@ class ordered_buffer {
//! Initial size for "array"
/** Must be a power of 2 */
static const size_type initial_buffer_size = 4;
+
+ //! Used only for out of order buffer.
+ Token high_token;
+
+ //! True for ordered filter, false otherwise.
+ bool is_ordered;
public:
//! Construct empty buffer.
- ordered_buffer() : array(NULL), array_size(0), low_token(0) {
+ ordered_buffer( bool is_ordered_ ) : array(NULL), array_size(0),
+ low_token(0), high_token(0), is_ordered(is_ordered_) {
grow(initial_buffer_size);
__TBB_ASSERT( array, NULL );
}
@@ -73,53 +86,67 @@ public:
//! Destroy the buffer.
~ordered_buffer() {
__TBB_ASSERT( array, NULL );
- cache_aligned_allocator<task*>().deallocate(array,array_size);
+ cache_aligned_allocator<task_info>().deallocate(array,array_size);
poison_pointer( array );
}
//! Put a token into the buffer.
- /** The putter must be in state that works if enqueued for later wakeup
- If putter was enqueued, returns NULL. Otherwise returns putter,
- which the caller is expected to spawn. */
+ /** If task information was placed into buffer, returns true;
+ otherwise returns false, informing the caller to create and spawn a task.
+ */
// Using template to avoid explicit dependency on stage_task
template<typename StageTask>
- task* put_token( StageTask& putter ) {
- task* result = &putter;
+ bool put_token( StageTask& putter ) {
{
spin_mutex::scoped_lock lock( array_mutex );
- Token token = putter.next_token_number();
+ Token token = is_ordered ? putter.next_token_number() : high_token++;
if( token!=low_token ) {
// Trying to put token that is beyond low_token.
// Need to wait until low_token catches up before dispatching.
- result = NULL;
__TBB_ASSERT( (tokendiff_t)(token-low_token)>0, NULL );
if( token-low_token>=array_size )
grow( token-low_token+1 );
ITT_NOTIFY( sync_releasing, this );
- array[token&array_size-1] = &putter;
+ putter.put_task_info(array[token&array_size-1]);
+ return true;
}
}
- return result;
+ return false;
}
//! Note that processing of a token is finished.
/** Fires up processing of the next token, if processing was deferred. */
- void note_done( Token token, task& spawner ) {
- task* wakee=NULL;
+ // Using template to avoid explicit dependency on stage_task
+ template<typename StageTask>
+ void note_done( Token token, StageTask& spawner ) {
+ task_info wakee = {NULL, 0, 0, false};
{
spin_mutex::scoped_lock lock( array_mutex );
- if( token==low_token ) {
+ if( !is_ordered || token==low_token ) {
// Wake the next task
- task*& item = array[++low_token & array_size-1];
+ task_info& item = array[++low_token & array_size-1];
ITT_NOTIFY( sync_acquired, this );
wakee = item;
- item = NULL;
+ item.is_valid = false;
}
}
- if( wakee ) {
- spawner.spawn(*wakee);
+ if( wakee.is_valid )
+ spawner.spawn_stage_task(wakee);
+ }
+
+#if __TBB_EXCEPTIONS
+ //! The method destroys all data in filters to prevent memory leaks
+ void clear( filter* my_filter ) {
+ long t=low_token;
+ for( size_type i=0; i<array_size; ++i, ++t ){
+ task_info& temp = array[t&array_size-1];
+ if (temp.is_valid ) {
+ my_filter->finalize(temp.my_object);
+ temp.is_valid = false;
+ }
}
}
+#endif
};
void ordered_buffer::grow( size_type minimum_size ) {
@@ -127,17 +154,17 @@ void ordered_buffer::grow( size_type minimum_size ) {
size_type new_size = old_size ? 2*old_size : initial_buffer_size;
while( new_size<minimum_size )
new_size*=2;
- task** new_array = cache_aligned_allocator<task*>().allocate(new_size);
- task** old_array = array;
+ task_info* new_array = cache_aligned_allocator<task_info>().allocate(new_size);
+ task_info* old_array = array;
for( size_type i=0; i<new_size; ++i )
- new_array[i] = NULL;
+ new_array[i].is_valid = false;
long t=low_token;
for( size_type i=0; i<old_size; ++i, ++t )
new_array[t&new_size-1] = old_array[t&old_size-1];
array = new_array;
array_size = new_size;
if( old_array )
- cache_aligned_allocator<task*>().deallocate(old_array,old_size);
+ cache_aligned_allocator<task_info>().deallocate(old_array,old_size);
}
class stage_task: public task {
@@ -180,13 +207,41 @@ public:
}
//! The virtual task execution method
/*override*/ task* execute();
+#if __TBB_EXCEPTIONS
+ ~stage_task()
+ {
+ if (my_filter && my_object && (my_filter->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4)) {
+ __TBB_ASSERT(is_cancelled(), "Tryning to finalize the task that wasn't cancelled");
+ my_filter->finalize(my_object);
+ my_object = NULL;
+ }
+ }
+#endif // __TBB_EXCEPTIONS
+ //! Creates and spawns stage_task from task_info
+ void spawn_stage_task(const task_info& info)
+ {
+ stage_task* clone = new( allocate_additional_child_of(*my_pipeline.end_counter) ) stage_task( my_pipeline, my_filter );
+ clone->my_token = info.my_token;
+ clone->my_token_ready = info.my_token_ready;
+ clone->my_object = info.my_object;
+
+ spawn(*clone);
+ }
+ //! Puts current task information
+ void put_task_info(task_info &where_to_put ) {
+ where_to_put.my_object = my_object;
+ where_to_put.my_token = my_token;
+ where_to_put.my_token_ready = my_token_ready;
+ where_to_put.is_valid = true;
+ }
};
task* stage_task::execute() {
__TBB_ASSERT( !my_at_start || !my_object, NULL );
if( my_at_start ) {
if( my_filter->is_serial() ) {
- if( (my_object = (*my_filter)(my_object)) ) {
+ my_object = (*my_filter)(my_object);
+ if( my_object ) {
my_token = my_pipeline.token_counter++;
my_token_ready = true;
ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );
@@ -202,7 +257,8 @@ task* stage_task::execute() {
ITT_NOTIFY( sync_releasing, &my_pipeline.input_tokens );
if( --my_pipeline.input_tokens>0 )
spawn( *new( allocate_additional_child_of(*my_pipeline.end_counter) ) stage_task( my_pipeline ) );
- if( !(my_object = (*my_filter)(my_object)) ) {
+ my_object = (*my_filter)(my_object);
+ if( !my_object ) {
my_pipeline.end_of_input = true;
return NULL;
}
@@ -211,7 +267,7 @@ task* stage_task::execute() {
} else {
my_object = (*my_filter)(my_object);
if( ordered_buffer* input_buffer = my_filter->input_buffer )
- input_buffer->note_done(my_token,*this);
+ input_buffer->note_done(my_token, *this);
}
task* next = NULL;
my_filter = my_filter->next_filter_in_pipeline;
@@ -221,18 +277,16 @@ task* stage_task::execute() {
add_to_depth(1);
if( ordered_buffer* input_buffer = my_filter->input_buffer ) {
// The next filter must execute tokens in order.
- stage_task& clone = *new( allocate_continuation() ) stage_task( my_pipeline, my_filter );
- clone.my_token = my_token;
- clone.my_token_ready = my_token_ready;
- clone.my_object = my_object;
- next = input_buffer->put_token(clone);
- } else {
- /* A semi-hackish way to reexecute the same task object immediately without spawning.
- recycle_as_continuation marks the task for future execution,
- and then 'this' pointer is returned to bypass spawning. */
- recycle_as_continuation();
- next = this;
+ if (input_buffer->put_token(*this )){
+ my_filter = NULL; // To prevent deleting my_object twice if exception occurs
+ return NULL;
+ }
}
+ /* A semi-hackish way to reexecute the same task object immediately without spawning.
+ recycle_as_continuation marks the task for future execution,
+ and then 'this' pointer is returned to bypass spawning. */
+ recycle_as_continuation();
+ next = this;
} else {
// Reached end of the pipe. Inject a new token.
// The token must be injected before execute() returns, in order to prevent the
@@ -253,6 +307,16 @@ void pipeline::inject_token( task& ) {
__TBB_ASSERT(0,"illegal call to inject_token");
}
+#if __TBB_EXCEPTIONS
+void pipeline::clear_filters() {
+ for( filter* f = filter_list; f; f = f->next_filter_in_pipeline ) {
+ if ((f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(4))
+ if( internal::ordered_buffer* b = f->input_buffer )
+ b->clear(f);
+ }
+}
+#endif
+
pipeline::pipeline() :
filter_list(NULL),
filter_end(NULL),
@@ -276,7 +340,7 @@ void pipeline::clear() {
}
next=f->next_filter_in_pipeline;
f->next_filter_in_pipeline = filter::not_in_pipeline();
- if ( (f->my_filter_mode & internal::VERSION_MASK) >= __TBB_PIPELINE_VERSION(3) ) {
+ if ( (f->my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
f->prev_filter_in_pipeline = filter::not_in_pipeline();
f->my_pipeline = NULL;
}
@@ -285,16 +349,16 @@ void pipeline::clear() {
}
void pipeline::add_filter( filter& filter_ ) {
-#if TBB_DO_ASSERT
- if ( (filter_.my_filter_mode & internal::VERSION_MASK) >= __TBB_PIPELINE_VERSION(3) )
+#if TBB_USE_ASSERT
+ if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) )
__TBB_ASSERT( filter_.prev_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
__TBB_ASSERT( filter_.next_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
__TBB_ASSERT( !end_counter, "invocation of add_filter on running pipeline" );
#endif
if( filter_.is_serial() ) {
- filter_.input_buffer = new internal::ordered_buffer();
+ filter_.input_buffer = new internal::ordered_buffer( filter_.is_ordered() );
}
- if ( (filter_.my_filter_mode & internal::VERSION_MASK) >= __TBB_PIPELINE_VERSION(3) ) {
+ if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
filter_.my_pipeline = this;
filter_.prev_filter_in_pipeline = filter_end;
if ( filter_list == NULL)
@@ -336,20 +400,42 @@ void pipeline::remove_filter( filter& filter_ ) {
filter_.my_pipeline = NULL;
}
-void pipeline::run( size_t max_number_of_live_tokens ) {
+void pipeline::run( size_t max_number_of_live_tokens
+#if __TBB_EXCEPTIONS
+ , tbb::task_group_context& context
+#endif
+ ) {
__TBB_ASSERT( max_number_of_live_tokens>0, "pipeline::run must have at least one token" );
__TBB_ASSERT( !end_counter, "pipeline already running?" );
+ // The class destroys end_counter and clears all ordered buffers if pipeline was cancelled.
+ class pipeline_cleaner: internal::no_copy {
+ pipeline& my_pipeline;
+ public:
+ pipeline_cleaner(pipeline& _pipeline) : my_pipeline(_pipeline)
+ {}
+ ~pipeline_cleaner(){
+#if __TBB_EXCEPTIONS
+ if (my_pipeline.end_counter->is_cancelled()) // Pipeline was cancelled
+ my_pipeline.clear_filters();
+#endif
+ my_pipeline.end_counter->destroy(*my_pipeline.end_counter);
+ my_pipeline.end_counter = NULL;
+ }
+ };
if( filter_list ) {
if( filter_list->next_filter_in_pipeline || !filter_list->is_serial() ) {
+ pipeline_cleaner my_pipeline_cleaner(*this);
end_of_input = false;
+#if __TBB_EXCEPTIONS
+ end_counter = new( task::allocate_root(context) ) empty_task;
+#else
end_counter = new( task::allocate_root() ) empty_task;
+#endif
// 2 = 1 for spawned child + 1 for wait
end_counter->set_ref_count(2);
input_tokens = internal::Token(max_number_of_live_tokens);
// Prime the pump with the non-waiter
end_counter->spawn_and_wait_for_all( *new( end_counter->allocate_child() ) internal::stage_task( *this ) );
- end_counter->destroy(*end_counter);
- end_counter = NULL;
} else {
// There are no filters, and thus no parallelism is possible.
// Just drain the input stream.
@@ -359,8 +445,15 @@ void pipeline::run( size_t max_number_of_live_tokens ) {
}
}
+#if __TBB_EXCEPTIONS
+void pipeline::run( size_t max_number_of_live_tokens ) {
+ tbb::task_group_context context;
+ run(max_number_of_live_tokens, context);
+}
+#endif // __TBB_EXCEPTIONS
+
filter::~filter() {
- if ( (my_filter_mode & internal::VERSION_MASK) >= __TBB_PIPELINE_VERSION(3) ) {
+ if ( (my_filter_mode & version_mask) >= __TBB_PIPELINE_VERSION(3) ) {
if ( next_filter_in_pipeline != filter::not_in_pipeline() ) {
__TBB_ASSERT( prev_filter_in_pipeline != filter::not_in_pipeline(), "probably filter list is broken" );
my_pipeline->remove_filter(*this);
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
index 5067892..9d62867 100644
--- a/src/tbb/queuing_mutex.cpp
+++ b/src/tbb/queuing_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -48,11 +48,11 @@ void queuing_mutex::scoped_lock::acquire( queuing_mutex& m )
next = NULL;
going = 0;
- ITT_NOTIFY(sync_prepare, mutex);
// The fetch_and_store must have release semantics, because we are
// "sending" the fields initialized above to other processors.
scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
if( pred ) {
+ ITT_NOTIFY(sync_prepare, mutex);
__TBB_ASSERT( !pred->next, "the predecessor has another successor!");
pred->next = this;
SpinwaitWhileEq( going, 0ul );
@@ -110,4 +110,8 @@ done:
initialize();
}
+void queuing_mutex::internal_construct() {
+ ITT_SYNC_CREATE(this, _T("tbb::queuing_mutex"), _T(""));
+}
+
} // namespace tbb
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
index 3b5e61b..45c03ce 100644
--- a/src/tbb/queuing_rw_mutex.cpp
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -36,11 +36,25 @@
#include "tbb/queuing_rw_mutex.h"
#include "itt_notify.h"
-
namespace tbb {
using namespace internal;
+//! Flag bits in a state_t that specify information about a locking request.
+enum state_t_flags {
+ STATE_NONE = 0,
+ STATE_WRITER = 1,
+ STATE_READER = 1<<1,
+ STATE_READER_UNBLOCKNEXT = 1<<2,
+ STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
+ STATE_ACTIVEREADER = 1<<3,
+ STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
+ STATE_UPGRADE_REQUESTED = 1<<4,
+ STATE_UPGRADE_WAITING = 1<<5,
+ STATE_UPGRADE_LOSER = 1<<6,
+ STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
+};
+
const unsigned char RELEASED = 0;
const unsigned char ACQUIRED = 1;
@@ -81,7 +95,7 @@ inline void queuing_rw_mutex::scoped_lock::unblock_or_wait_on_internal_lock( uin
}
template<typename T>
-class tricky_atomic_pointer {
+class tricky_atomic_pointer: no_copy {
public:
typedef typename atomic_word<sizeof(T*)>::word word;
template<memory_semantics M>
@@ -110,6 +124,7 @@ public:
return reinterpret_cast<T*>( reinterpret_cast<word>(ref) | operand2 );
}
};
+
typedef tricky_atomic_pointer<queuing_rw_mutex::scoped_lock> tricky_pointer;
//! Mask for low order bit of a pointer.
@@ -120,11 +135,10 @@ uintptr get_flag( queuing_rw_mutex::scoped_lock* ptr ) {
return uintptr(tricky_pointer(ptr)&FLAG);
}
+//------------------------------------------------------------------------
+// Methods of queuing_rw_mutex::scoped_lock
+//------------------------------------------------------------------------
-//! Methods of queuing_rw_mutex::scoped_lock
-/** ----------------------------------------- **/
-
-//! A method to acquire queuing_rw_mutex lock
void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
{
__TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
@@ -135,15 +149,15 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
prev = NULL;
next = NULL;
going = 0;
- state = write ? STATE_WRITER : STATE_READER;
+ state = state_t(write ? STATE_WRITER : STATE_READER);
internal_lock = RELEASED;
- ITT_NOTIFY(sync_prepare, mutex);
queuing_rw_mutex::scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
if( write ) { // Acquiring for write
if( pred ) {
+ ITT_NOTIFY(sync_prepare, mutex);
pred = tricky_pointer(pred) & ~FLAG;
__TBB_ASSERT( !( tricky_pointer(pred) & FLAG ), "use of corrupted pointer!" );
__TBB_ASSERT( !pred->next, "the predecessor has another successor!");
@@ -153,7 +167,9 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
}
} else { // Acquiring for read
-
+#if DO_ITT_NOTIFY
+ bool sync_prepare_done = false;
+#endif
if( pred ) {
unsigned short pred_state;
__TBB_ASSERT( !this->prev, "the predecessor is already set" );
@@ -172,11 +188,19 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
// ensure release semantics on IPF
__TBB_store_with_release(pred->next,this);
if( pred_state != STATE_ACTIVEREADER ) {
+#if DO_ITT_NOTIFY
+ sync_prepare_done = true;
+ ITT_NOTIFY(sync_prepare, mutex);
+#endif
SpinwaitUntilEq(going, 1);
}
}
unsigned short old_state = state.compare_and_swap<tbb::acquire>(STATE_ACTIVEREADER, STATE_READER);
if( old_state!=STATE_READER ) {
+#if DO_ITT_NOTIFY
+ if( !sync_prepare_done )
+ ITT_NOTIFY(sync_prepare, mutex);
+#endif
// Failed to become active reader -> need to unblock the next waiting reader first
__TBB_ASSERT( state==STATE_READER_UNBLOCKNEXT, "unexpected state" );
SpinwaitWhileEq(next, (scoped_lock*)NULL);
@@ -195,7 +219,6 @@ void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
__TBB_load_with_acquire(going);
}
-//! A method to try-acquire queuing_rw_mutex lock
bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write )
{
__TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
@@ -205,7 +228,7 @@ bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write
prev = NULL;
next = NULL;
going = 0;
- state = write ? STATE_WRITER : STATE_ACTIVEREADER;
+ state = state_t(write ? STATE_WRITER : STATE_ACTIVEREADER);
internal_lock = RELEASED;
if( m.q_tail ) return false;
@@ -226,7 +249,6 @@ bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write
}
-//! A method to release queuing_rw_mutex lock
void queuing_rw_mutex::scoped_lock::release( )
{
__TBB_ASSERT(this->mutex!=NULL, "no lock acquired");
@@ -335,9 +357,6 @@ done:
initialize();
}
-//! A method to downgrade a writer to a reader.
-/** See more detailed comments in the SPIN model:
- <TBB directory>/tools/spin_models/ReaderWriterMutex.pml */
bool queuing_rw_mutex::scoped_lock::downgrade_to_reader()
{
__TBB_ASSERT( state==STATE_WRITER, "no sense to downgrade a reader" );
@@ -368,9 +387,6 @@ downgrade_done:
return true;
}
-//! A method to upgrade a reader to a writer.
-/** See more detailed comments in the SPIN model:
- <TBB directory>/tools/spin_models/ReaderWriterMutex.pml */
bool queuing_rw_mutex::scoped_lock::upgrade_to_writer()
{
__TBB_ASSERT( state==STATE_ACTIVEREADER, "only active reader can be upgraded" );
@@ -429,8 +445,7 @@ waiting:
pred = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->prev), FLAG);
if( pred ) {
bool success = pred->try_acquire_internal_lock();
- //unsigned short pred_state = // keep the variable in code just in case
- pred->state.compare_and_swap<tbb::release>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
+ pred->state.compare_and_swap<tbb::release>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
if( !success ) {
tmp = tricky_pointer::compare_and_swap<tbb::release>(&(this->prev), pred, tricky_pointer(pred)|FLAG );
if( tricky_pointer(tmp)&FLAG ) {
@@ -457,7 +472,7 @@ waiting:
// additional lifetime issue prevention checks
// wait for the successor to finish working with my fields
wait_for_release_of_internal_lock();
- // now wait for the predecesor to finish working with my fields
+ // now wait for the predecessor to finish working with my fields
SpinwaitWhileEq( going, 2 );
// there is an acquire semantics statement in the end of SpinwaitWhileEq.
@@ -469,4 +484,8 @@ waiting:
return result;
}
+void queuing_rw_mutex::internal_construct() {
+ ITT_SYNC_CREATE(this, _T("tbb::queuing_rw_mutex"), _T(""));
+}
+
} // namespace tbb
diff --git a/src/tbb/recursive_mutex.cpp b/src/tbb/recursive_mutex.cpp
index 4f44a09..95e6290 100644
--- a/src/tbb/recursive_mutex.cpp
+++ b/src/tbb/recursive_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,6 +27,7 @@
*/
#include "tbb/recursive_mutex.h"
+#include "itt_notify.h"
namespace tbb {
@@ -116,6 +117,7 @@ void recursive_mutex::internal_construct() {
tbb::internal::handle_perror(error_code,"recursive_mutex: pthread_mutex_init failed");
pthread_mutexattr_destroy( &mtx_attr );
#endif /* _WIN32||_WIN64*/
+ ITT_SYNC_CREATE(&impl, _T("tbb::recursive_mutex"), _T(""));
}
void recursive_mutex::internal_destroy() {
diff --git a/src/tbb/spin_mutex.cpp b/src/tbb/spin_mutex.cpp
index 23758f7..e233ffb 100644
--- a/src/tbb/spin_mutex.cpp
+++ b/src/tbb/spin_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -61,4 +61,8 @@ bool spin_mutex::scoped_lock::internal_try_acquire( spin_mutex& m ) {
return result;
}
+void spin_mutex::internal_construct() {
+ ITT_SYNC_CREATE(this, _T("tbb::spin_mutex"), _T(""));
+}
+
} // namespace tbb
diff --git a/src/tbb/spin_rw_mutex.cpp b/src/tbb/spin_rw_mutex.cpp
index b59908e..2b80a18 100644
--- a/src/tbb/spin_rw_mutex.cpp
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -33,7 +33,7 @@
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (disable: 4244)
-#endif /* _MSC_VER && _Wp64 */
+#endif
namespace tbb {
@@ -49,7 +49,7 @@ bool spin_rw_mutex_v3::internal_acquire_writer()
{
ITT_NOTIFY(sync_prepare, this);
internal::ExponentialBackoff backoff;
- while(true) {
+ for(;;) {
state_t s = const_cast<volatile state_t&>(state); // ensure reloading
if( !(s & BUSY) ) { // no readers, no writers
if( CAS(state, WRITER, s)==s )
@@ -76,7 +76,7 @@ void spin_rw_mutex_v3::internal_acquire_reader()
{
ITT_NOTIFY(sync_prepare, this);
internal::ExponentialBackoff backoff;
- while(true) {
+ for(;;) {
state_t s = const_cast<volatile state_t&>(state); // ensure reloading
if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
state_t t = (state_t)__TBB_FetchAndAddW( &state, (intptr_t) ONE_READER );
@@ -167,4 +167,8 @@ bool spin_rw_mutex_v3::internal_try_acquire_reader()
return false;
}
+
+void spin_rw_mutex_v3::internal_construct() {
+ ITT_SYNC_CREATE(this, _T("tbb::spin_rw_mutex"), _T(""));
+}
} // namespace tbb
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
index 389e42c..d0df8ef 100644
--- a/src/tbb/task.cpp
+++ b/src/tbb/task.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -83,11 +83,6 @@
#include "tbb/spin_mutex.h"
#endif /* __TBB_EXCEPTIONS */
-#if defined(_MSC_VER) && defined(_Wp64)
- // Workaround for overzealous compiler warnings in /Wp64 mode
- #pragma warning (disable: 4312 4244 4267)
-#endif /* _MSC_VER && _Wp64 */
-
#include "tbb/partitioner.h"
#if DO_TBB_TRACE
@@ -97,9 +92,9 @@
#define TBB_TRACE(x) ((void)(0))
#endif /* DO_TBB_TRACE */
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
#define COUNT_TASK_NODES 1
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
/* If nonzero, then gather statistics */
#ifndef STATISTICS
@@ -121,10 +116,38 @@
reinterpret_cast<class_name*>((char*)member_addr - __TBB_offsetof(class_name, member_name))
#endif /* __TBB_EXCEPTIONS */
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Workaround for overzealous compiler warnings
+ // These particular warnings are so ubquitous that no attempt is made to narrow
+ // the scope of the warnings.
+ #pragma warning (disable: 4100 4127 4312 4244 4267 4706)
+#endif
+
+#include "itt_notify.h"
+
namespace tbb {
using namespace std;
+#if DO_ITT_NOTIFY && __TBB_NAMING_API_SUPPORT
+ const tchar
+ *SyncType_GlobalLock = _T("TbbGlobalLock"),
+ *SyncType_Scheduler = _T("TbbScheduler")
+ ;
+ const tchar
+ *SyncObj_LibraryInitialization = _T("TbbLibraryInitialization"),
+ *SyncObj_SchedulerInitialization = _T("TbbSchedulerInitialization"),
+ *SyncObj_SchedulersList = _T("TbbSchedulersList"),
+ *SyncObj_TaskStealingLoop = _T("TBB Scheduler"),
+ *SyncObj_WorkerTaskPool = _T("TBB Scheduler"),
+ *SyncObj_MasterTaskPool = _T("TBB Scheduler"),
+ *SyncObj_GateLock = _T("TBB Scheduler"),
+ *SyncObj_Gate = _T("TBB Scheduler"),
+ *SyncObj_SchedulerTermination = _T("TBB Scheduler"),
+ *SyncObj_ContextsList = _T("TBB Scheduler")
+ ;
+#endif /* DO_ITT_NOTIFY && __TBB_NAMING_API_SUPPORT */
+
namespace internal {
//! Alignment for a task object
@@ -221,7 +244,7 @@ public:
// Fence required because caller is sending the task_proxy to another thread.
__TBB_store_with_release( my_last, &t );
}
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
//! Verify that *this is initialized empty mailbox.
/** Raise assertion if *this is not in initialized state, or sizeof(this) is wrong.
Instead of providing a constructor, we provide this assertion, because for
@@ -232,7 +255,7 @@ public:
__TBB_ASSERT( !my_last, NULL );
__TBB_ASSERT( !my_is_idle, NULL );
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
//! Drain the mailbox
intptr drain() {
@@ -365,14 +388,14 @@ class TaskPool {
friend class GenericScheduler;
template<typename SchedulerTraits> friend class internal::CustomScheduler;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
bool assert_okay() const {
__TBB_ASSERT( this!=NULL, NULL );
__TBB_ASSERT( prefix().steal_begin>=-4, NULL );
return true;
}
-#endif /* TBB_DO_ASSERT */
-};
+#endif /* TBB_USE_ASSERT */
+}; // class TaskPool
//------------------------------------------------------------------------
// Arena
@@ -403,7 +426,7 @@ struct WorkerDescriptor {
};
//! The useful contents of an ArenaPrefix
-class UnpaddedArenaPrefix {
+class UnpaddedArenaPrefix: no_copy {
friend class GenericScheduler;
template<typename SchedulerTraits> friend class internal::CustomScheduler;
friend class Arena;
@@ -545,12 +568,49 @@ struct IntelSchedulerTraits {
};
//------------------------------------------------------------------------
+// Begin shared data layout.
+//
+// The follow global data items are read-only after initialization.
+// The first item is aligned on a 128 byte boundary so that it starts a new cache line.
+//------------------------------------------------------------------------
+
+static internal::Arena * TheArena;
+static mutex TheArenaMutex;
+
+#if __TBB_SCHEDULER_OBSERVER
+typedef spin_rw_mutex::scoped_lock task_scheduler_observer_mutex_scoped_lock;
+/** aligned_space used here to shut up warnings when mutex destructor is called while threads are still using it. */
+static aligned_space<spin_rw_mutex,1> the_task_scheduler_observer_mutex;
+static observer_proxy* global_first_observer_proxy;
+static observer_proxy* global_last_observer_proxy;
+#endif /* __TBB_SCHEDULER_OBSERVER */
+
+//! Number of hardware threads
+/** One more than the default number of workers. */
+static int DefaultNumberOfThreads;
+
+//! T::id for the scheduler traits type T to use for the scheduler
+/** For example, the default value is DefaultSchedulerTraits::id. */
+static int SchedulerTraitsId;
+
+#if _WIN32||_WIN64
+ static CRITICAL_SECTION OneTimeInitializationLock;
+ //! Index for thread-local storage.
+ /** The original version of TBB used __declspec(thread) for thread-local storage.
+ Unfortunately, __declspec(thread) does not work on pre-Vista OSes for DLLs
+ called from plug-ins. */
+ static DWORD TLS_Index;
+#else /* !WIN */
+ static pthread_mutex_t OneTimeInitializationLock = PTHREAD_MUTEX_INITIALIZER;
+ static pthread_key_t TLS_Key;
+#endif /* !WIN */
+
+//------------------------------------------------------------------------
// Class __TBB_InitOnce
//------------------------------------------------------------------------
//! Class handles acquisition and release of global resources during startup and shutdown.
-/** Currently, its job is to deal with initializing/deleting
- OneTimeInitializationCriticalSection (on Windows only)
+/** Currently, its job is to deal with initializing/deleting OneTimeInitializationLock on Windows,
and allocating/freeing thread-local storage. */
class __TBB_InitOnce {
static atomic<int> count;
@@ -572,8 +632,10 @@ public:
//! Add reference to resources. If first reference added, acquire the resources.
static void add_ref() {
- if( ++count==1 )
+ if( ++count==1 ) {
acquire_resources();
+ ITT_SYNC_CREATE(&OneTimeInitializationLock, SyncType_GlobalLock, SyncObj_LibraryInitialization);
+ }
}
//! Remove reference to resources. If last reference added, release the resources.
static void remove_ref() {
@@ -582,72 +644,39 @@ public:
if( k==0 )
release_resources();
}
-};
-
-//------------------------------------------------------------------------
-// Begin shared data layout.
-//
-// The follow global data items are read-only after initialization.
-// The first item is aligned on a 128 byte boundary so that it starts a new cache line.
-//------------------------------------------------------------------------
-
-static internal::Arena * TheArena;
-static mutex TheArenaMutex;
-
-#if __TBB_SCHEDULER_OBSERVER
-typedef spin_rw_mutex::scoped_lock task_scheduler_observer_mutex_scoped_lock;
-/** aligned_space used here to shut up warnings when mutex destructor is called while threads are still using it. */
-static aligned_space<spin_rw_mutex,1> the_task_scheduler_observer_mutex;
-static observer_proxy* global_first_observer_proxy;
-static observer_proxy* global_last_observer_proxy;
-#endif /* __TBB_SCHEDULER_OBSERVER */
-
-//! Number of hardware threads
-/** One more than the default number of workers. */
-static int DefaultNumberOfThreads;
-
-//! T::id for the scheduler traits type T to use for the scheduler
-/** For example, the default value is DefaultSchedulerTraits::id. */
-static int SchedulerTraitsId;
-
-} // namespace internal
-
-} // namespace tbb
-
-#include "itt_notify.h"
-
-namespace tbb {
-namespace internal {
+}; // class __TBB_InitOnce
//! Flag that is set to true after one-time initializations are done.
static bool OneTimeInitializationsDone;
+#if DO_ITT_NOTIFY && __TBB_NAMING_API_SUPPORT
+ static bool ITT_Present;
+ static bool ITT_InitializationDone;
+#endif
+
//! Counter of references to TLS.
atomic<int> __TBB_InitOnce::count;
-#if _WIN32||_WIN64
-static CRITICAL_SECTION OneTimeInitializationCriticalSection;
-//! Index for thread-local storage.
-/** The original version of TBB used __declspec(thread) for thread-local storage.
- Unfortunately, __declspec(thread) does not work on pre-Vista OSes for DLLs
- called from plug-ins. */
-static DWORD TLS_Index;
-#if __TBB_TASK_CPP_DIRECTLY_INCLUDED
-static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
-#endif
-
-#else /* not Windows */
-static pthread_mutex_t OneTimeInitializationMutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_key_t TLS_Key;
#if (__linux__ || __APPLE__) && __GNUC__ && !(__INTEL_COMPILER && __TBB_ipf)
-// Use GCC-style attribute to set the highest initialization priority (the lowest possible number)
-// ICC for IA-64 has a bug in handling init_priority so skipping in this case
-static __TBB_InitOnce __TBB_InitOnceHiddenInstance __attribute__((init_priority (101)));
-#else
-static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
+ // Use GCC-style attribute to set the highest initialization priority (the lowest possible number)
+ // ICC for IA-64 has a bug in handling init_priority so skipping in this case
+ static __TBB_InitOnce __TBB_InitOnceHiddenInstance __attribute__((init_priority (101)));
+#elif !(_WIN32||_WIN64) || __TBB_TASK_CPP_DIRECTLY_INCLUDED
+ static __TBB_InitOnce __TBB_InitOnceHiddenInstance;
#endif
-#endif /* _WIN32||_WIN64 */
+#if USE_PTHREAD
+ #define OneTimeMutexOp(op) { \
+ int status = pthread_mutex_##op( &OneTimeInitializationLock ); \
+ if( status ) \
+ handle_perror(status,"pthread_mutex_"#op); \
+ }
+ #define LockOneTimeMutex() OneTimeMutexOp(lock)
+ #define UnlockOneTimeMutex() OneTimeMutexOp(unlock)
+#else
+ #define LockOneTimeMutex() EnterCriticalSection( &OneTimeInitializationLock )
+ #define UnlockOneTimeMutex() LeaveCriticalSection( &OneTimeInitializationLock )
+#endif /* USE_PTHREAD */
//! Table of primes used by fast random-number generator.
/** Also serves to keep anything else from being placed in the same
@@ -752,14 +781,36 @@ static const long PauseTime = 80;
//! Defined in cache_aligned_allocator.cpp
extern void initialize_cache_aligned_allocator();
-//! Perform lazy one-time initializations. */
+//! Performs initialization of tools support.
+/** Defined in task.cpp. Must be called in a protected do-once manner.
+ \return true if notification hooks were installed, false otherwise. **/
+bool InitializeITT();
+
+#if DO_ITT_NOTIFY && __TBB_NAMING_API_SUPPORT
+/** Calls tools interoperability mechanisms initialization routine in a protected
+ manner ensuring that it is done once only.
+ Used by dummy handlers only. **/
+void ITT_DoOneTimeInitialization() {
+#if !TBB_USE_DEBUG
+ // In debug builds constructor of one of the static TBB mutexes that is called
+ // first are invokes proxy ITT handler before our do-once mutex is initialized.
+ // Since this kind of initialization takes place under the loader lock, it is
+ // safe to omit synchronization here.
+ LockOneTimeMutex();
+#endif
+ if ( !ITT_InitializationDone ) {
+ ITT_Present = InitializeITT();
+ ITT_InitializationDone = true;
+ }
+#if !TBB_USE_DEBUG
+ UnlockOneTimeMutex();
+#endif
+}
+#endif /* DO_ITT_NOTIFY && __TBB_NAMING_API_SUPPORT */
+
+//! Performs lazy one-time initializations.
void DoOneTimeInitializations() {
-#if USE_PTHREAD
- int status = 0;
- pthread_mutex_lock( &OneTimeInitializationMutex );
-#else
- EnterCriticalSection( &OneTimeInitializationCriticalSection );
-#endif /* USE_PTHREAD */
+ LockOneTimeMutex();
// No fence required for load of OneTimeInitializationsDone, because we are inside a critical section.
if( !OneTimeInitializationsDone ) {
__TBB_InitOnce::add_ref();
@@ -767,11 +818,25 @@ void DoOneTimeInitializations() {
PrintVersion();
bool have_itt = false;
#if DO_ITT_NOTIFY
+#if __TBB_NAMING_API_SUPPORT
+ if ( !ITT_InitializationDone ) {
+ ITT_Present = InitializeITT();
+ ITT_InitializationDone = true;
+ }
+ have_itt = ITT_Present;
+#else
have_itt = InitializeITT();
+#endif /* __TBB_NAMING_API_SUPPORT */
#endif /* DO_ITT_NOTIFY */
initialize_cache_aligned_allocator();
if( !have_itt )
SchedulerTraitsId = IntelSchedulerTraits::id;
+ else {
+ ITT_SYNC_CREATE(&TheArenaMutex, SyncType_GlobalLock, SyncObj_SchedulerInitialization);
+#if __TBB_EXCEPTIONS
+ ITT_SYNC_CREATE(&the_scheduler_list_mutex, SyncType_GlobalLock, SyncObj_SchedulersList);
+#endif /* __TBB_EXCEPTIONS */
+ }
PrintExtraVersionInfo( "SCHEDULER",
SchedulerTraitsId==IntelSchedulerTraits::id ? "Intel" : "default" );
#if __TBB_EXCEPTIONS
@@ -780,13 +845,7 @@ void DoOneTimeInitializations() {
#endif /* __TBB_EXCEPTIONS */
OneTimeInitializationsDone = true;
}
-#if USE_PTHREAD
- pthread_mutex_unlock( &OneTimeInitializationMutex );
- if( status )
- handle_perror(status,"pthread_key_create");
-#else
- LeaveCriticalSection( &OneTimeInitializationCriticalSection );
-#endif /* USE_PTHREAD */
+ UnlockOneTimeMutex();
}
//------------------------------------------------------------------------
@@ -807,31 +866,30 @@ __TBB_InitOnce::~__TBB_InitOnce() {
void __TBB_InitOnce::acquire_resources() {
TLS_Index = TlsAlloc();
if( TLS_Index!=TLS_OUT_OF_INDEXES ) {
- InitializeCriticalSection(&OneTimeInitializationCriticalSection);
+ InitializeCriticalSection(&OneTimeInitializationLock);
} else {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
// Issue diagnostic here, not failing assertion, because client
// might want to test graceful recovery from this problem.
fprintf( stderr, "TBB failed to initialize: TLS is out of indices\n" );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
}
void __TBB_InitOnce::release_resources() {
- DeleteCriticalSection(&OneTimeInitializationCriticalSection);
-#if TBB_DO_ASSERT
+ DeleteCriticalSection(&OneTimeInitializationLock);
+#if TBB_USE_ASSERT
if( TlsGetValue(TLS_Index) ) {
fprintf( stderr, "TBB is unloaded while tbb::task_scheduler_init object is alive?" );
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
TlsFree(TLS_Index);
TLS_Index = 0;
}
#if !__TBB_TASK_CPP_DIRECTLY_INCLUDED
//! Windows "DllMain" that handles startup and shutdown of dynamic library.
-extern "C" bool WINAPI DllMain( HANDLE hinstDLL, DWORD reason, LPVOID lpvReserved );
-bool WINAPI DllMain( HANDLE hinstDLL, DWORD reason, LPVOID lpvReserved ) {
+extern "C" bool WINAPI DllMain( HANDLE /*hinstDLL*/, DWORD reason, LPVOID /*lpvReserved*/ ) {
switch( reason ) {
case DLL_PROCESS_ATTACH:
__TBB_InitOnce::add_ref();
@@ -1082,17 +1140,19 @@ class GenericScheduler: public scheduler {
#endif /* STATISTICS */
//! Try to enter the arena
- /** On return, guaranteess that task pool has been acquired. */
+ /** On return, guarantees that task pool has been acquired. */
void try_enter_arena();
//! Leave the arena
void leave_arena( bool compress );
+ //! Locks the local task pool
void acquire_task_pool() const;
+ //! Unlocks the local task pool
void release_task_pool() const;
- //! Get task from ready pool.
+ //! Get a task from the local pool.
/** Called only by the thread that owns *this.
Gets task only if there is one at depth d or deeper in the pool.
If successful, unlinks the task and returns a pointer to it.
@@ -1111,6 +1171,7 @@ class GenericScheduler: public scheduler {
return t.prefix().extra_state==es_task_proxy;
}
+ //! Extracts task pointer from task_proxy, and frees the proxy.
/** Return NULL if underlying task was claimed by mailbox. */
task* strip_proxy( task_proxy* result );
@@ -1118,8 +1179,6 @@ class GenericScheduler: public scheduler {
task* steal_task( UnpaddedArenaSlot& arena_slot, depth_type d );
//! Grow "array" to at least "minimum_size" elements.
- /** Does nothing if array is already that big.
- Returns &array[minimum_size-1] */
void grow( TaskPool::size_type minimum_size );
//! Call destructor for a task and put it on the free list (or free it if it is big).
@@ -1150,11 +1209,11 @@ class GenericScheduler: public scheduler {
protected:
GenericScheduler( Arena* arena );
-#if TBB_DO_ASSERT || TEST_ASSEMBLY_ROUTINES
+#if TBB_USE_ASSERT || TEST_ASSEMBLY_ROUTINES
//! Check that internal data structures are in consistent state.
/** Raises __TBB_ASSERT failure if inconsistency is found. */
bool assert_okay() const;
-#endif /* TBB_DO_ASSERT || TEST_ASSEMBLY_ROUTINES */
+#endif /* TBB_USE_ASSERT || TEST_ASSEMBLY_ROUTINES */
public:
/*override*/ void spawn( task& first, task*& next );
@@ -1172,7 +1231,7 @@ public:
task& allocate_task( size_t number_of_bytes, depth_type depth, task* parent, task_group_context* context );
#else
task& allocate_task( size_t number_of_bytes, depth_type depth, task* parent );
-#endif /* __TBB_EXCEPTIONS */
+#endif
//! Optimization hint to free_task that enables it omit unnecessary tests and code.
enum hint {
@@ -1194,22 +1253,22 @@ public:
void free_task( task& t );
void free_task_proxy( task_proxy& tp ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
poison_pointer( tp.outbox );
poison_pointer( tp.next_in_mailbox );
tp.task_and_tag = 0xDEADBEEF;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
free_task<is_small>(tp);
}
//! Return task object to the memory allocator.
void deallocate_task( task& t ) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
task_prefix& p = t.prefix();
p.state = 0xFF;
p.extra_state = 0xFF;
poison_pointer(p.next);
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
NFS_Free((char*)&t-task_prefix_reservation_size);
#if COUNT_TASK_NODES
task_node_count -= 1;
@@ -1377,11 +1436,11 @@ inline void GenericScheduler::free_task( task& t ) {
// Verify that optimization hints are correct.
__TBB_ASSERT( h!=is_small_local || p.origin==this, NULL );
__TBB_ASSERT( !(h&is_small) || p.origin, NULL );
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
p.depth = 0xDEADBEEF;
p.ref_count = 0xDEADBEEF;
poison_pointer(p.owner);
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
__TBB_ASSERT( 1L<<t.state() & (1L<<task::executing|1L<<task::allocated), NULL );
p.state = task::freed;
if( h==is_small_local || p.origin==this ) {
@@ -1425,7 +1484,7 @@ inline void GenericScheduler::mark_pool_full() {
// on every task pool release, even when stealing does not occur. Since TBB allows parallelism,
// but never promises parallelism, the missed wakeup is not a correctness problem.
Gate::state_t snapshot = arena->prefix().gate.get_state();
- if( snapshot!=SNAPSHOT_FULL && snapshot!=SNAPSHOT_PERMANENTLY_OPEN )
+ if( snapshot!=SNAPSHOT_FULL )
arena->prefix().gate.try_update( SNAPSHOT_FULL, SNAPSHOT_PERMANENTLY_OPEN, true );
}
@@ -1483,7 +1542,9 @@ class CustomScheduler: private GenericScheduler {
typedef CustomScheduler<SchedulerTraits> scheduler_type;
//! Construct a CustomScheduler
- CustomScheduler( Arena* arena ) : GenericScheduler(arena) {}
+ CustomScheduler( Arena* arena ) : GenericScheduler(arena) {
+ ITT_SYNC_CREATE(this, SyncType_Scheduler, SyncObj_TaskStealingLoop);
+ }
public:
static GenericScheduler* allocate_scheduler( Arena* arena ) {
@@ -1498,7 +1559,7 @@ public:
//------------------------------------------------------------------------
// AssertOkay
//------------------------------------------------------------------------
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
/** Logically, this method should be a member of class task.
But we do not want to publish it, so it is here instead. */
static bool AssertOkay( const task& task ) {
@@ -1508,7 +1569,7 @@ static bool AssertOkay( const task& task ) {
__TBB_ASSERT( task.prefix().depth<1L<<30, "corrupt task (absurd depth)" );
return true;
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
//------------------------------------------------------------------------
// Methods of Arena
@@ -1530,11 +1591,11 @@ Arena* Arena::allocate_arena( unsigned number_of_slots, unsigned number_of_worke
memset( w, 0, sizeof(WorkerDescriptor)*(number_of_workers));
a->prefix().worker_list = w;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
// Verify that earlier memset initialized the mailboxes.
for( unsigned j=1; j<=number_of_slots; ++j )
a->mailbox(j).assert_is_initialized();
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
size_t k;
// Mark each worker slot as locked and unused
@@ -1542,10 +1603,13 @@ Arena* Arena::allocate_arena( unsigned number_of_slots, unsigned number_of_worke
a->slot[k].steal_end = -3;
w[k].arena = a;
w[k].thread_stack_size = stack_size;
+ ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_WorkerTaskPool);
}
// Mark rest of slots as unused
- for( ; k<number_of_slots; ++k )
+ for( ; k<number_of_slots; ++k ) {
a->slot[k].steal_end = -4;
+ ITT_SYNC_CREATE(a->slot + k, SyncType_Scheduler, SyncObj_MasterTaskPool);
+ }
// Publish the Arena.
// A memory release fence is not required here, because workers have not started yet,
@@ -1582,6 +1646,8 @@ void Arena::terminate_workers() {
for( int i=n; --i>=0; ) {
WorkerDescriptor& w = prefix().worker_list[i];
if( intptr(w.scheduler)!=-1 ) {
+ ITT_SYNC_CREATE(&w.thread_handle, SyncType_Scheduler, SyncObj_SchedulerTermination);
+ ITT_NOTIFY(sync_prepare, &w.thread_handle);
#if USE_WINTHREAD
DWORD status = WaitForSingleObject( w.thread_handle, INFINITE );
if( status==WAIT_FAILED ) {
@@ -1595,6 +1661,7 @@ void Arena::terminate_workers() {
if( status )
handle_perror(status,"pthread_join");
#endif /* USE_WINTHREAD */
+ ITT_NOTIFY(sync_acquired, &w.thread_handle);
}
}
// All workers have quit
@@ -1639,8 +1706,11 @@ intptr Arena::workers_task_node_count() {
// Methods of GenericScheduler
//------------------------------------------------------------------------
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning(disable:4355)
+ // Suppress overzealous compiler warning about using 'this' in base initializer list.
+ #pragma warning(push)
+ #pragma warning(disable:4355)
#endif
+
GenericScheduler::GenericScheduler( Arena* arena_ ) :
deepest(-1),
array_size(0),
@@ -1681,9 +1751,10 @@ GenericScheduler::GenericScheduler( Arena* arena_ ) :
dummy_slot.owner_waits = false;
array_size = TaskPool::min_array_size;
#if __TBB_EXCEPTIONS
- dummy_task = &allocate_task( sizeof(task), -1, NULL, NULL );
context_list_head.my_prev = &context_list_head;
context_list_head.my_next = &context_list_head;
+ ITT_SYNC_CREATE(&context_list_mutex, SyncType_Scheduler, SyncObj_ContextsList);
+ dummy_task = &allocate_task( sizeof(task), -1, NULL, NULL );
#else
dummy_task = &allocate_task( sizeof(task), -1, NULL );
#endif /* __TBB_EXCEPTIONS */
@@ -1691,10 +1762,14 @@ GenericScheduler::GenericScheduler( Arena* arena_ ) :
__TBB_ASSERT( assert_okay(), "constructor error" );
}
-#if TBB_DO_ASSERT||TEST_ASSEMBLY_ROUTINES
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning(pop)
+#endif // warning 4355 is back
+
+#if TBB_USE_ASSERT||TEST_ASSEMBLY_ROUTINES
bool GenericScheduler::assert_okay() const {
__TBB_ASSERT( array_size>=TaskPool::min_array_size, NULL );
-#if TBB_DO_ASSERT>=2||TEST_ASSEMBLY_ROUTINES
+#if TBB_USE_ASSERT>=2||TEST_ASSEMBLY_ROUTINES
acquire_task_pool();
TaskPool* tp = dummy_slot.task_pool;
__TBB_ASSERT( tp, NULL );
@@ -1706,10 +1781,10 @@ bool GenericScheduler::assert_okay() const {
}
}
release_task_pool();
-#endif /* TBB_DO_ASSERT>=2||TEST_ASSEMBLY_ROUTINES */
+#endif /* TBB_USE_ASSERT>=2||TEST_ASSEMBLY_ROUTINES */
return true;
}
-#endif /* TBB_DO_ASSERT||TEST_ASSEMBLY_ROUTINES */
+#endif /* TBB_USE_ASSERT||TEST_ASSEMBLY_ROUTINES */
#if __TBB_EXCEPTIONS
@@ -1780,10 +1855,8 @@ void GenericScheduler::grow( TaskPool::size_type minimum_size ) {
TBB_TRACE(("%p.grow(minimum_size=%lx)\n", this, minimum_size ));
__TBB_ASSERT( assert_okay(), NULL );
- // Might need to resize the underlying array.
- // Get a fresh zeroed array before acquiring the old array.
TaskPool::size_type b_size = 2*minimum_size;
- __TBB_ASSERT( b_size>=TaskPool::min_array_size, NULL );
+ __TBB_ASSERT( b_size > array_size, "ready task pool cannot shrink" );
TaskPool* new_pool = TaskPool::allocate_task_pool( b_size );
__TBB_ASSERT( assert_okay(), NULL );
acquire_task_pool();
@@ -1895,7 +1968,7 @@ inline void GenericScheduler::acquire_task_pool() const {
__TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
__TBB_ASSERT( dummy_slot.task_pool->prefix().steal_begin<=depth_type(array_size), NULL );
__TBB_ASSERT( deepest<=depth_type(array_size), NULL );
-}
+} // GenericScheduler::acquire_task_pool
inline void GenericScheduler::release_task_pool() const {
__TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
@@ -1912,20 +1985,19 @@ void GenericScheduler::spawn( task& first, task*& next ) {
TBB_TRACE(("%p.internal_spawn enter\n", this ));
task* first_ptr = &first;
task** link = &first_ptr;
- for( task* t = first_ptr; ; t=*link )
- {
- __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
+ for( task* t = first_ptr; ; t=*link ) {
__TBB_ASSERT( t->prefix().depth==first.prefix().depth, "tasks must have same depth" );
+ __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
t->prefix().owner = this;
t->prefix().state = task::ready;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
if( task* parent = t->parent() ) {
internal::reference_count ref_count = parent->prefix().ref_count;
__TBB_ASSERT( ref_count>=0, "attempt to spawn task whose parent has a ref_count<0" );
__TBB_ASSERT( ref_count!=0, "attempt to spawn task whose parent has a ref_count==0 (forgot to set_ref_count?)" );
parent->prefix().extra_state |= es_ref_count_active;
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
affinity_id dst_thread=t->prefix().affinity;
__TBB_ASSERT( dst_thread==0 || is_version_3_task(*t), "backwards compatibility to TBB 2.0 tasks is broken" );
if( dst_thread!=0 && dst_thread!=my_affinity_id ) {
@@ -1946,10 +2018,9 @@ void GenericScheduler::spawn( task& first, task*& next ) {
ITT_NOTIFY( sync_releasing, proxy.outbox );
// Mail the proxy - after this point, t->prefix().next may be changed by another thread.
proxy.outbox->push(proxy);
- goto advance;
+ } else {
+ link = &t->prefix().next;
}
- link = &t->prefix().next;
-advance:
if( &t->prefix().next==&next )
break;
}
@@ -2006,10 +2077,6 @@ void GenericScheduler::spawn_root_and_wait( task& first, task*& next ) {
spawn( *first.prefix().next, next );
TBB_TRACE(("spawn_root_and_wait((task_list*)%p): calling %p.loop\n",&first,this));
wait_for_all( dummy, &first );
-#if !__TBB_EXCEPTIONS
- // empty_task has trivial destructor, so call free_task directly instead of going through destroy_task.
- free_task<is_small_local>( dummy );
-#endif /* __TBB_EXCEPTIONS */
TBB_TRACE(("spawn_root_and_wait((task_list*)%p): return\n",&first));
}
@@ -2020,7 +2087,7 @@ inline task* GenericScheduler::get_mailbox_task() {
intptr tat = __TBB_load_with_acquire(t->task_and_tag);
__TBB_ASSERT( tat==task_proxy::mailbox_bit || tat==(tat|3)&&tat!=3, NULL );
if( tat!=task_proxy::mailbox_bit && __TBB_CompareAndSwapW( &t->task_and_tag, task_proxy::pool_bit, tat )==tat ) {
- // Sucessfully grabbed the task, and left pool seeker with job of freeing the proxy.
+ // Successfully grabbed the task, and left pool seeker with job of freeing the proxy.
ITT_NOTIFY( sync_acquired, inbox.outbox() );
result = (task*)(tat & ~3);
result->prefix().owner = this;
@@ -2039,22 +2106,20 @@ inline task* GenericScheduler::strip_proxy( task_proxy* tp ) {
// Attempt to transition it to "empty proxy in mailbox" state.
if( __TBB_CompareAndSwapW( &tp->task_and_tag, task_proxy::mailbox_bit, tat )==tat ) {
// Successfully grabbed the task, and left the mailbox with the job of freeing the proxy.
- goto success;
+ return (task*)(tat&~3);
}
__TBB_ASSERT( tp->task_and_tag==task_proxy::pool_bit, NULL );
- tat = task_proxy::pool_bit;
} else {
// We have exclusive access to the proxy
__TBB_ASSERT( (tat&3)==task_proxy::pool_bit, "task did not come from pool?" );
+ __TBB_ASSERT ( !(tat&~3), "Empty proxy in the pool contains non-zero task pointer" );
}
+#if TBB_USE_ASSERT
tp->prefix().state = task::allocated;
+#endif
free_task_proxy( *tp );
- if(!(tat&~3)) {
- // Another thread grabbed the underlying task via their mailbox
- return NULL;
- }
-success:
- return (task*)(tat&~3);
+ // Another thread grabbed the underlying task via their mailbox
+ return NULL;
}
inline task* GenericScheduler::get_task( depth_type d ) {
@@ -2090,11 +2155,12 @@ retry:
// Following assertion should be true because TBB 2.0 tasks never specify affinity, and hence are not proxied.
__TBB_ASSERT( is_version_3_task(*result), "backwards compatibility with TBB 2.0 broken" );
// Task affinity has changed.
+ innermost_running_task = result;
result->note_affinity(my_affinity_id);
}
}
return result;
-}
+} // GenericScheduler::get_task
task* GenericScheduler::steal_task( UnpaddedArenaSlot& arena_slot, depth_type d ) {
task* result = NULL;
@@ -2175,7 +2241,7 @@ done:
template<typename SchedulerTraits>
void CustomScheduler<SchedulerTraits>::wait_for_all( task& parent, task* child ) {
TBB_TRACE(("%p.wait_for_all(parent=%p,child=%p) enter\n", this, &parent, child));
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
__TBB_ASSERT( assert_okay(), NULL );
if( child ) {
__TBB_ASSERT( child->prefix().owner==this, NULL );
@@ -2184,7 +2250,11 @@ void CustomScheduler<SchedulerTraits>::wait_for_all( task& parent, task* child )
__TBB_ASSERT( parent.ref_count()>=1, "ref_count must be at least 1" );
}
__TBB_ASSERT( assert_okay(), NULL );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
+ // Using parent's refcount in sync_prepare (in the stealing loop below) is
+ // a workaround for TP. We need to name it here to display correctly in Ampl.
+ if( SchedulerTraits::itt_possible )
+ ITT_SYNC_CREATE(&parent.prefix().ref_count, SyncType_Scheduler, SyncObj_TaskStealingLoop);
#if __TBB_EXCEPTIONS
__TBB_ASSERT( parent.prefix().context || (is_worker() && &parent == dummy_task), "parent task does not have context" );
#endif /* __TBB_EXCEPTIONS */
@@ -2209,33 +2279,33 @@ exception_was_caught:
do {
// Inner loop evaluates tasks that are handed directly to us by other tasks.
while(t) {
+#if TBB_USE_ASSERT
__TBB_ASSERT(!is_proxy(*t),"unexpected proxy");
- task_prefix& pref = t->prefix();
- __TBB_ASSERT( pref.owner==this, NULL );
- task* t_next = NULL;
+ __TBB_ASSERT( t->prefix().owner==this, NULL );
#if __TBB_EXCEPTIONS
- if ( !pref.context->my_cancellation_requested ) {
-#endif /* __TBB_EXCEPTIONS */
- __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
- pref.state = task::executing;
- innermost_running_task = t;
+ if ( !t->prefix().context->my_cancellation_requested )
+#endif
+ __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
__TBB_ASSERT(assert_okay(),NULL);
- TBB_TRACE(("%p.wait_for_all: %p.execute\n",this,t));
- GATHER_STATISTIC( ++execute_count );
- t_next = t->execute();
+#endif /* TBB_USE_ASSERT */
+ task* t_next = NULL;
+ innermost_running_task = t;
+ t->prefix().state = task::executing;
+#if __TBB_EXCEPTIONS
+ if ( !t->prefix().context->my_cancellation_requested )
+#endif
+ {
+ TBB_TRACE(("%p.wait_for_all: %p.execute\n",this,t));
+ GATHER_STATISTIC( ++execute_count );
+ t_next = t->execute();
#if STATISTICS
- if (t_next) {
- affinity_id next_affinity=t_next->prefix().affinity;
- if (next_affinity != 0 && next_affinity != my_affinity_id)
- GATHER_STATISTIC( ++proxy_bypass_count );
- }
+ if (t_next) {
+ affinity_id next_affinity=t_next->prefix().affinity;
+ if (next_affinity != 0 && next_affinity != my_affinity_id)
+ GATHER_STATISTIC( ++proxy_bypass_count );
+ }
#endif
-
-#if __TBB_EXCEPTIONS
}
- else
- pref.state = task::executing;
-#endif /* __TBB_EXCEPTIONS */
if( t_next ) {
__TBB_ASSERT( t_next->state()==task::allocated,
"if task::execute() returns task, it must be marked as allocated" );
@@ -2244,19 +2314,22 @@ exception_was_caught:
}
__TBB_ASSERT(assert_okay(),NULL);
switch( task::state_type(t->prefix().state) ) {
- case task::executing:
+ case task::executing: {
// this block was copied below to case task::recycle
// when making changes, check it too
- if( task* s = t->parent() ) {
+ task* s = t->parent();
+ __TBB_ASSERT( innermost_running_task==t, NULL );
+ t->~task();
+ if( s ) {
if( SchedulerTraits::itt_possible )
ITT_NOTIFY(sync_releasing, &s->prefix().ref_count);
if( SchedulerTraits::has_slow_atomic && s->prefix().ref_count==1 ? (s->prefix().ref_count=0, true) : __TBB_FetchAndDecrementWrelease(&s->prefix().ref_count)==1 ) {
if( SchedulerTraits::itt_possible )
ITT_NOTIFY(sync_acquired, &s->prefix().ref_count);
depth_type s_depth = __TBB_load_with_acquire(s->prefix().depth);
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
s->prefix().extra_state &= ~es_ref_count_active;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
s->prefix().owner = this;
if( !t_next && s_depth>=deepest && s_depth>=d ) {
// Eliminate spawn/get_task pair.
@@ -2270,8 +2343,9 @@ exception_was_caught:
}
}
}
- destroy_task( *t );
+ free_task<no_hint>( *t );
break;
+ }
case task::recycle: { // state set by recycle_as_safe_continuation()
t->prefix().state = task::allocated;
@@ -2286,11 +2360,11 @@ exception_was_caught:
ITT_NOTIFY(sync_acquired, &s->prefix().ref_count);
// Unused load is put here for sake of inserting an "acquire" fence.
(void)__TBB_load_with_acquire(s->prefix().depth);
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
s->prefix().extra_state &= ~es_ref_count_active;
__TBB_ASSERT( s->prefix().owner==this, "ownership corrupt?" );
__TBB_ASSERT( s->prefix().depth>=d, NULL );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
if( !t_next ) {
t_next = s;
} else {
@@ -2302,13 +2376,13 @@ exception_was_caught:
}
case task::reexecute: // set by recycle_to_reexecute()
- __TBB_ASSERT( t_next, "reexecution requires that method 'execute' return a task" );
+ __TBB_ASSERT( t_next && t_next != t, "reexecution requires that method 'execute' return another task" );
TBB_TRACE(("%p.wait_for_all: put task %p back into array",this,t));
t->prefix().state = task::allocated;
CustomScheduler<SchedulerTraits>::spawn( *t, t->prefix().next );
__TBB_ASSERT(assert_okay(),NULL);
break;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
case task::allocated:
break;
case task::ready:
@@ -2319,7 +2393,7 @@ exception_was_caught:
#else
default: // just to shut up some compilation warnings
break;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
__TBB_ASSERT( !t_next||t_next->prefix().depth>=d, NULL );
t = t_next;
@@ -2328,18 +2402,17 @@ exception_was_caught:
t = get_task( d );
__TBB_ASSERT(!t || !is_proxy(*t),"unexpected proxy");
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
__TBB_ASSERT(assert_okay(),NULL);
if(t) {
AssertOkay(*t);
__TBB_ASSERT( t->prefix().owner==this, "thread got task that it does not own" );
}
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
} while( t ); // end of local task array processing loop
inbox.set_is_idle( true );
- __TBB_ASSERT( arena->prefix().number_of_workers>0||parent.prefix().ref_count==1,
- "deadlock detected" );
+ __TBB_ASSERT( arena->prefix().number_of_workers>0||parent.prefix().ref_count==1, "deadlock detected" );
// The state "failure_count==-1" is used only when itt_possible is true,
// and denotes that a sync_prepare has not yet been issued.
for( int failure_count = -static_cast<int>(SchedulerTraits::itt_possible);; ++failure_count) {
@@ -2371,8 +2444,10 @@ exception_was_caught:
GATHER_STATISTIC( ++proxy_steal_count );
}
GATHER_STATISTIC( ++steal_count );
- if( is_version_3_task(*t) )
+ if( is_version_3_task(*t) ) {
+ innermost_running_task = t;
t->note_affinity( my_affinity_id );
+ }
} else {
GATHER_STATISTIC( ++mail_received_count );
}
@@ -2445,9 +2520,9 @@ fail:
#endif /* __TBB_EXCEPTIONS */
done:
parent.prefix().ref_count = 0;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
parent.prefix().extra_state &= ~es_ref_count_active;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
innermost_running_task = old_innermost_running_task;
if( deepest<0 && innermost_running_task==dummy_task && arena_slot!=&dummy_slot ) {
leave_arena(/*compress=*/true);
@@ -2457,7 +2532,7 @@ done:
task_group_context* parent_ctx = parent.prefix().context;
if ( __TBB_load_with_acquire(parent_ctx->my_cancellation_requested) ) {
tbb_exception *e = __TBB_load_with_acquire(parent_ctx->my_exception);
- if ( innermost_running_task == dummy_task ) {
+ if ( innermost_running_task == dummy_task && parent_ctx == dummy_task->prefix().context ) {
// We are in the innermost task dispatch loop of a master thread, and
// the whole task tree has been collapsed. So we may clear cancellation data.
__TBB_store_with_release(parent_ctx->my_cancellation_requested, 0);
@@ -2481,7 +2556,6 @@ void GenericScheduler::try_enter_arena() {
__TBB_ASSERT( arena, NULL );
__TBB_ASSERT( arena_slot, "arena_slot not set" );
__TBB_ASSERT( arena_slot==&dummy_slot, "already in arena?" );
- // Sync up the local cancellation state with the global one.
unsigned n = arena->prefix().number_of_slots;
unsigned j = unsigned(arena->prefix().limit);
for( unsigned k=j; k<n; ++k ) {
@@ -2507,10 +2581,10 @@ void GenericScheduler::leave_arena( bool compress ) {
__TBB_ASSERT( arena_slot!=&dummy_slot, "not in arena" );
// Remove myself from the arena.
acquire_task_pool();
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
for( depth_type i=0; i<deepest; ++i )
__TBB_ASSERT( !dummy_slot.task_pool->array[i], "leaving arena, but have tasks to do" );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
size_t k = dummy_slot.task_pool->prefix().arena_index;
__TBB_ASSERT( &arena->slot[k]==arena_slot, NULL );
arena_slot->task_pool = NULL;
@@ -2583,7 +2657,7 @@ GenericScheduler* GenericScheduler::create_worker( WorkerDescriptor& w ) {
HANDLE cur_process = GetCurrentProcess();
BOOL bRes = DuplicateHandle(cur_process, GetCurrentThread(), cur_process, &w.thread_handle, 0, FALSE, DUPLICATE_SAME_ACCESS);
if( !bRes ) {
- printf("ERROR: DuplicateHandle failed with status 0x%08X", GetLastError());
+ fprintf(stderr, "ERROR: DuplicateHandle failed with status 0x%08X", GetLastError());
w.thread_handle = INVALID_HANDLE_VALUE;
}
#else /* USE_PTHREAD */
@@ -2642,6 +2716,12 @@ GenericScheduler* GenericScheduler::create_master( Arena* arena ) {
return s;
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress warning about volatile variable sink_for_alloca being defined but not used.
+ #pragma warning (push)
+ #pragma warning (disable: 4189)
+#endif
+
#if USE_WINTHREAD
unsigned WINAPI GenericScheduler::worker_routine( void* arg )
#else
@@ -2650,7 +2730,7 @@ void* GenericScheduler::worker_routine( void* arg )
{
GenericScheduler& scheduler = *create_worker(*(WorkerDescriptor*)arg);
- ITT_NAME_SET(thr_name_set, "TBB Worker Thread", 17);
+ ITT_THREAD_SET_NAME(_T("TBB Worker Thread"));
#if (_WIN32||_WIN64)&&!__TBB_ipf
// Deal with 64K aliasing. The formula for "offset" is a Fibonacci hash function,
@@ -2667,27 +2747,31 @@ void* GenericScheduler::worker_routine( void* arg )
#if USE_PTHREAD
pthread_cleanup_push( cleanup_worker_thread, &scheduler );
-#endif /* USE_PTHREAD */
-
-#if USE_WINTHREAD
- __try {
-#endif /* USE_WINTHREAD */
+#elif USE_WINTHREAD
+ class raii_finalizer : internal::no_copy {
+ GenericScheduler& scheduler;
+ public:
+ explicit raii_finalizer(GenericScheduler& sch) : scheduler(sch) {}
+ ~raii_finalizer() { cleanup_worker_thread(&scheduler); }
+ } finalizer(scheduler);
+#else
+ #error Must define USE_PTHREAD or USE_WINTHREAD
+#endif
scheduler.wait_for_all(*scheduler.dummy_task,NULL);
#if USE_WINTHREAD
- } __finally {
- cleanup_worker_thread(&scheduler);
- }
return 0;
#elif USE_PTHREAD
pthread_cleanup_pop( true );
return NULL;
-#else
- #error Must define USE_PTHREAD or USE_WINTHREAD
-#endif /* USE_PTHREAD */
+#endif
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif // warning 4189 is back
+
void GenericScheduler::cleanup_worker_thread( void* arg ) {
TBB_TRACE(("%p.cleanup_worker_thread enter\n",arg));
GenericScheduler& s = *(GenericScheduler*)arg;
@@ -2755,7 +2839,7 @@ task& allocate_root_proxy::allocate( size_t size ) {
return v->allocate_task( size, p.depth+1, NULL, p.context );
#else
return v->allocate_task( size, v->innermost_running_task->prefix().depth+1, NULL );
-#endif /* __TBB_EXCEPTIONS */
+#endif
}
void allocate_root_proxy::free( task& task ) {
@@ -2791,19 +2875,20 @@ task& allocate_root_with_context_proxy::allocate( size_t size ) const {
uintptr_t local_count_snapshot = ((GenericScheduler*)my_context.my_owner)->local_cancel_count;
__TBB_store_with_release(my_context.my_parent, p.context);
uintptr_t global_count_snapshot = __TBB_load_with_acquire(global_cancel_count);
- if ( local_count_snapshot == global_count_snapshot ) {
- // It is possible that there is active cancellation request in our
- // parents chain. Fortunately the equality of the local and global
- // counters means that if this is the case it's already been propagated
- // to our parent.
- my_context.my_cancellation_requested = p.context->my_cancellation_requested;
- }
- else if ( !my_context.my_cancellation_requested ) {
- // Another thread was propagating cancellation request at the moment
- // when we set our parent, but since we do not use locks we could've
- // been skipped. So we have to make sure that we get the cancellation
- // request if one of our ancestors has been canceled.
- my_context.propagate_cancellation_from_ancestors();
+ if ( !my_context.my_cancellation_requested ) {
+ if ( local_count_snapshot == global_count_snapshot ) {
+ // It is possible that there is active cancellation request in our
+ // parents chain. Fortunately the equality of the local and global
+ // counters means that if this is the case it's already been propagated
+ // to our parent.
+ my_context.my_cancellation_requested = p.context->my_cancellation_requested;
+ } else {
+ // Another thread was propagating cancellation request at the moment
+ // when we set our parent, but since we do not use locks we could've
+ // been skipped. So we have to make sure that we get the cancellation
+ // request if one of our ancestors has been canceled.
+ my_context.propagate_cancellation_from_ancestors();
+ }
}
}
my_context.my_kind = task_group_context::binding_completed;
@@ -2901,7 +2986,7 @@ size_t get_initial_auto_partitioner_divisor() {
Arena* arena = TheArena;
__TBB_ASSERT( arena, "thread did not activate a task_scheduler_init object?" );
const size_t X_FACTOR = 4;
- return X_FACTOR * arena->prefix().number_of_workers+1;
+ return X_FACTOR * (arena->prefix().number_of_workers+1);
}
//------------------------------------------------------------------------
@@ -3103,6 +3188,7 @@ void task::internal_set_ref_count( int count ) {
task& task::self() {
GenericScheduler* v = GetThreadSpecific();
__TBB_ASSERT( v->assert_okay(), NULL );
+ __TBB_ASSERT( v->innermost_running_task, NULL );
return *v->innermost_running_task;
}
@@ -3139,7 +3225,7 @@ void task::spawn_and_wait_for_all( task_list& list ) {
/** Defined out of line so that compiler does not replicate task's vtable.
It's pointless to define it inline anyway, because all call sites to it are virtual calls
that the compiler is unlikely to optimize. */
-void task::note_affinity( affinity_id id ) {
+void task::note_affinity( affinity_id ) {
}
//------------------------------------------------------------------------
@@ -3238,7 +3324,7 @@ int task_scheduler_init::default_num_threads() {
//------------------------------------------------------------------------
namespace internal {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
static atomic<int> observer_proxy_count;
struct check_observer_proxy_count {
@@ -3250,12 +3336,12 @@ struct check_observer_proxy_count {
};
static check_observer_proxy_count the_check_observer_proxy_count;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
observer_proxy::observer_proxy( task_scheduler_observer_v3& tso ) : next(NULL), observer(&tso) {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
++observer_proxy_count;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
// 1 for observer
gc_ref_count = 1;
{
@@ -3281,11 +3367,11 @@ void observer_proxy::remove_from_list() {
prev->next = next;
else
global_first_observer_proxy = next;
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
poison_pointer(prev);
poison_pointer(next);
gc_ref_count = -666;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
void observer_proxy::remove_ref_slow() {
@@ -3310,9 +3396,9 @@ void observer_proxy::remove_ref_slow() {
}
if( !r ) {
__TBB_ASSERT( gc_ref_count == -666, NULL );
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
--observer_proxy_count;
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
delete this;
}
}
@@ -3375,9 +3461,9 @@ observer_proxy* observer_proxy::process_list( observer_proxy* local_last, bool i
} catch(...) {
// Suppress exception, because user routines are supposed to be observing, not changing
// behavior of a master or worker thread.
-#if __TBB_DO_ASSERT
+#if TBB_USE_ASSERT
fprintf(stderr,"warning: %s threw exception\n",is_entry?"on_scheduler_entry":"on_scheduler_exit");
-#endif /* __TBB_DO_ASSERT */
+#endif /* __TBB_USE_ASSERT */
}
intptr bc = --tso->my_busy_count;
__TBB_ASSERT_EX( bc>=0, "my_busy_count underflowed" );
diff --git a/src/tbb/tbb_assert_impl.h b/src/tbb/tbb_assert_impl.h
index 00e06fa..cfbded6 100644
--- a/src/tbb/tbb_assert_impl.h
+++ b/src/tbb/tbb_assert_impl.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -40,6 +40,12 @@
#include <crtdbg.h>
#endif
+#if _MSC_VER >= 1400
+#define __TBB_EXPORTED_FUNC __cdecl
+#else
+#define __TBB_EXPORTED_FUNC
+#endif
+
using namespace std;
namespace tbb {
@@ -48,13 +54,13 @@ namespace tbb {
static assertion_handler_type assertion_handler;
- assertion_handler_type set_assertion_handler( assertion_handler_type new_handler ) {
+ assertion_handler_type __TBB_EXPORTED_FUNC set_assertion_handler( assertion_handler_type new_handler ) {
assertion_handler_type old_handler = assertion_handler;
assertion_handler = new_handler;
return old_handler;
}
- void assertion_failure( const char* filename, int line, const char* expression, const char* comment ) {
+ void __TBB_EXPORTED_FUNC assertion_failure( const char* filename, int line, const char* expression, const char* comment ) {
if( assertion_handler_type a = assertion_handler ) {
(*a)(filename,line,expression,comment);
} else {
@@ -81,7 +87,7 @@ namespace tbb {
namespace internal {
//! Report a runtime warning.
- void runtime_warning( const char* format, ... )
+ void __TBB_EXPORTED_FUNC runtime_warning( const char* format, ... )
{
char str[1024]; memset(str, 0, 1024);
va_list args; va_start(args, format);
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
index 9ee3595..bba6944 100644
--- a/src/tbb/tbb_misc.cpp
+++ b/src/tbb/tbb_misc.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,7 +26,7 @@
the GNU General Public License.
*/
-// Source file for miscellanous entities that are infrequently referenced by
+// Source file for miscellaneous entities that are infrequently referenced by
// an executing program.
#include "tbb/tbb_stddef.h"
@@ -38,10 +38,16 @@
#include <cstdlib>
#include <cstring>
#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) || defined(__SUNPRO_CC)
-#include <stdexcept>
+ #include <string> // std::string is used to construct runtime_error
+ #include <stdexcept>
#endif
-#if !(_WIN32||_WIN64)
-#include <dlfcn.h>
+#if __sun
+ #include <alloca.h> /* alloca */
+#endif
+#if _WIN32||_WIN64
+ #include <malloc.h> /* alloca */
+#else
+ #include <dlfcn.h>
#endif
using namespace std;
@@ -78,21 +84,31 @@ bool GetBoolEnvironmentVariable( const char * name ) {
#if __TBB_WEAK_SYMBOLS
-bool FillDynamicLinks( const char* /*library*/, const DynamicLinkDescriptor descriptors[], size_t n )
+bool FillDynamicLinks( const char* /*library*/, const DynamicLinkDescriptor descriptors[], size_t n, size_t required )
{
+ if ( required == ~(size_t)0 )
+ required = n;
+ __TBB_ASSERT( required<=n, "Number of required entry points exceeds their total number" );
size_t k = 0;
- for ( ; k < n && descriptors[k].ptr; ++k )
+ // Check if the first required entries are present in what was loaded into our process
+ while ( k < required && descriptors[k].ptr )
+ ++k;
+ if ( k < required )
+ return false;
+ // Commit all the entry points.
+ for ( k = 0; k < n; ++k )
*descriptors[k].handler = (PointerToHandler) descriptors[k].ptr;
- return k == n;
+ return true;
}
#else /* !__TBB_WEAK_SYMBOLS */
-bool FillDynamicLinks( void* module, const DynamicLinkDescriptor descriptors[], size_t n )
+bool FillDynamicLinks( void* module, const DynamicLinkDescriptor descriptors[], size_t n, size_t required )
{
- const size_t max_n = 5;
- __TBB_ASSERT( 0<n && n<=max_n, NULL );
- PointerToHandler h[max_n];
+ PointerToHandler *h = (PointerToHandler*)alloca(n * sizeof(PointerToHandler));
+ if ( required == ~(size_t)0 )
+ required = n;
+ __TBB_ASSERT( required<=n, "Number of required entry points exceeds their total number" );
size_t k = 0;
for ( ; k < n; ++k ) {
#if _WIN32||_WIN64
@@ -100,27 +116,25 @@ bool FillDynamicLinks( void* module, const DynamicLinkDescriptor descriptors[],
#else
h[k] = (PointerToHandler) dlsym( module, descriptors[k].name );
#endif /* _WIN32||_WIN64 */
- if ( !h[k] )
- break;
- }
- // Commit the entry points if they are all present.
- if ( k == n ) {
- // Cannot use memset here, because the writes must be atomic.
- for( size_t k=0; k<n; ++k )
- *descriptors[k].handler = h[k];
- return true;
+ if ( !h[k] && k < required )
+ return false;
}
- return false;
+ __TBB_ASSERT( k == n, "if required entries are initialized, all entries are expected to be walked");
+ // Commit the entry points.
+ // Cannot use memset here, because the writes must be atomic.
+ for( k = 0; k < n; ++k )
+ *descriptors[k].handler = h[k];
+ return true;
}
-bool FillDynamicLinks( const char* library, const DynamicLinkDescriptor descriptors[], size_t n )
+bool FillDynamicLinks( const char* library, const DynamicLinkDescriptor descriptors[], size_t n, size_t required )
{
#if _WIN32||_WIN64
- if ( FillDynamicLinks( GetModuleHandle(NULL), descriptors, n ) )
+ if ( FillDynamicLinks( GetModuleHandle(NULL), descriptors, n, required ) )
// Target library was statically linked into this executable
return true;
// Prevent Windows from displaying silly message boxes if it fails to load library
- // (e.g. because of MS runtime problems - one those crazy manifest related ones)
+ // (e.g. because of MS runtime problems - one of those crazy manifest related ones)
UINT prev_mode = SetErrorMode (SEM_FAILCRITICALERRORS);
void* module = LoadLibrary (library);
SetErrorMode (prev_mode);
@@ -128,7 +142,7 @@ bool FillDynamicLinks( const char* library, const DynamicLinkDescriptor descript
void* module = dlopen( library, RTLD_LAZY );
#endif /* _WIN32||_WIN64 */
// Return true if the library is there and it contains all the expected entry points.
- return module != NULL && FillDynamicLinks( module, descriptors, n );
+ return module != NULL && FillDynamicLinks( module, descriptors, n, required );
}
#endif /* !__TBB_WEAK_SYMBOLS */
@@ -153,39 +167,44 @@ void PrintExtraVersionInfo( const char* category, const char* description ) {
} // namespace internal
+extern "C" int TBB_runtime_interface_version() {
+ return TBB_INTERFACE_VERSION;
+}
+
} // namespace tbb
#if __TBB_x86_32
#include "tbb/atomic.h"
-namespace tbb {
-namespace internal {
+//on Windows, int64_t defined in tbb::internal namespace only
+#if _WIN32||_WIN64
+using tbb::internal::int64_t;
+#endif
-//! Handle 8-byte store that crosses a cache line.
-extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
-#if TBB_DO_ASSERT
+//! Warn about 8-byte store that crosses a cache line.
+extern "C" void __TBB_machine_store8_slow_perf_warning( volatile void *ptr ) {
// Report run-time warning unless we have already recently reported warning for that address.
const unsigned n = 4;
- static atomic<void*> cache[n];
- static atomic<unsigned> k;
+ static tbb::atomic<void*> cache[n];
+ static tbb::atomic<unsigned> k;
for( unsigned i=0; i<n; ++i )
if( ptr==cache[i] )
goto done;
cache[(k++)%n] = const_cast<void*>(ptr);
- runtime_warning( "atomic store on misaligned 8-byte location %p is slow", ptr );
+ tbb::internal::runtime_warning( "atomic store on misaligned 8-byte location %p is slow", ptr );
done:;
-#endif /* TBB_DO_ASSERT */
- for( AtomicBackoff b;; b.pause() ) {
+}
+
+//! Handle 8-byte store that crosses a cache line.
+extern "C" void __TBB_machine_store8_slow( volatile void *ptr, int64_t value ) {
+ for( tbb::internal::AtomicBackoff b;; b.pause() ) {
int64_t tmp = *(int64_t*)ptr;
if( __TBB_machine_cmpswp8(ptr,value,tmp)==tmp )
break;
- b.pause();
}
}
-} // namespace internal
-} // namespace tbb
#endif /* __TBB_x86_32 */
#if __TBB_ipf
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
index 4965b50..a3fa567 100644
--- a/src/tbb/tbb_misc.h
+++ b/src/tbb/tbb_misc.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,7 +32,9 @@
#include "tbb/tbb_stddef.h"
#include "tbb/tbb_machine.h"
-#if defined(__linux__)
+#if _WIN32||_WIN64
+#include <windows.h>
+#elif defined(__linux__)
#include <sys/sysinfo.h>
#elif defined(__sun)
#include <sys/sysinfo.h>
@@ -109,7 +111,7 @@ static inline int DetectNumberOfWorkers() {
Design note: ADR put this routine off to the side in tbb_misc.cpp instead of
Task.cpp because the throw generates a pathetic lot of code, and ADR wanted
this large chunk of code to be placed on a cold page. */
-void handle_perror( int error_code, const char* what );
+void __TBB_EXPORTED_FUNC handle_perror( int error_code, const char* what );
//! True if environment variable with given name is set and not 0; otherwise false.
bool GetBoolEnvironmentVariable( const char * name );
@@ -150,10 +152,15 @@ struct DynamicLinkDescriptor {
#endif /* !__TBB_WEAK_SYMBOLS */
//! Fill in dynamically linked handlers.
-/** n is the length of array list[], must not exceed 4, which is all we currently need.
- If the library and all of the handlers are found, then all corresponding handler pointers are set.
- Otherwise all corresponding handler pointers are untouched. */
-bool FillDynamicLinks( const char* libraryname, const DynamicLinkDescriptor list[], size_t n );
+/** 'n' is the length of the array descriptors[].
+ 'required' is the number of the initial entries in the array descriptors[]
+ that have to be found in order for the call to succeed. If the library and
+ all the required handlers are found, then the corresponding handler pointers
+ are set. Otherwise the original array of descriptors is left untouched. **/
+bool FillDynamicLinks( const char* libraryname,
+ const DynamicLinkDescriptor descriptors[],
+ size_t n,
+ size_t required = ~(size_t)0 );
//! Class that implements exponential backoff.
/** See implementation of SpinwaitWhileEq for an example. */
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
index c1a3e4b..f82c8ce 100644
--- a/src/tbb/tbb_resource.rc
+++ b/src/tbb/tbb_resource.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
@@ -58,6 +58,13 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
+// manifest integration
+#ifdef TBB_MANIFEST
+#include "winuser.h"
+2 RT_MANIFEST tbbmanifest.exe.manifest
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
//
// Version
//
@@ -85,7 +92,7 @@ BEGIN
//what is it? VALUE "InternalName", "tbb\0"
VALUE "LegalCopyright", "Copyright (C) 2006\0"
VALUE "LegalTrademarks", "\0"
-#ifndef TBB_DO_ASSERT
+#ifndef TBB_USE_DEBUG
VALUE "OriginalFilename", "tbb.dll\0"
#else
VALUE "OriginalFilename", "tbb_debug.dll\0"
diff --git a/src/tbb/tbb_thread.cpp b/src/tbb/tbb_thread.cpp
index 914cad6..bb328e2 100644
--- a/src/tbb/tbb_thread.cpp
+++ b/src/tbb/tbb_thread.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
index 875a491..cd86de0 100644
--- a/src/tbb/tbb_version.h
+++ b/src/tbb/tbb_version.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -57,16 +57,27 @@
#define __TBB_VERSION_NUMBER "TBB: VERSION\t\t" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL
#define __TBB_INTERFACE_VERSION_NUMBER "TBB: INTERFACE VERSION\t" __TBB_STRING(TBB_INTERFACE_VERSION) ENDL
#define __TBB_VERSION_DATETIME "TBB: BUILD_DATE\t\t" __TBB_DATETIME ENDL
-#ifndef TBB_DO_ASSERT
- #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\tundefined" ENDL
-#elif TBB_DO_ASSERT==0
- #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t0" ENDL
-#elif TBB_DO_ASSERT==1
- #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t1" ENDL
-#elif TBB_DO_ASSERT==2
- #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t2" ENDL
+#ifndef TBB_USE_DEBUG
+ #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\tundefined" ENDL
+#elif TBB_USE_DEBUG==0
+ #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t0" ENDL
+#elif TBB_USE_DEBUG==1
+ #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t1" ENDL
+#elif TBB_USE_DEBUG==2
+ #define __TBB_VERSION_USE_DEBUG "TBB: TBB_USE_DEBUG\t2" ENDL
#else
- #error Unexpected value for TBB_DO_ASSERT
+ #error Unexpected value for TBB_USE_DEBUG
+#endif
+#ifndef TBB_USE_ASSERT
+ #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\tundefined" ENDL
+#elif TBB_USE_ASSERT==0
+ #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t0" ENDL
+#elif TBB_USE_ASSERT==1
+ #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t1" ENDL
+#elif TBB_USE_ASSERT==2
+ #define __TBB_VERSION_USE_ASSERT "TBB: TBB_USE_ASSERT\t2" ENDL
+#else
+ #error Unexpected value for TBB_USE_ASSERT
#endif
#ifndef DO_ITT_NOTIFY
#define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\tundefined" ENDL
@@ -78,7 +89,7 @@
#error Unexpected value for DO_ITT_NOTIFY
#endif
-#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_DO_ASSERT __TBB_VERSION_DO_NOTIFY
+#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_INTERFACE_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_USE_DEBUG __TBB_VERSION_USE_ASSERT __TBB_VERSION_DO_NOTIFY
// numbers
#ifndef __TBB_VERSION_YMD
diff --git a/src/tbb/win32-tbb-export.def b/src/tbb/win32-tbb-export.def
index 38bd192..97eaca2 100644
--- a/src/tbb/win32-tbb-export.def
+++ b/src/tbb/win32-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
@@ -91,10 +91,13 @@ __TBB_machine_trylockbyte
?handle_perror at internal@tbb@@YAXHPBD at Z
?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z
?runtime_warning at internal@tbb@@YAXPBDZZ
+TBB_runtime_interface_version
; itt_notify.cpp
?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPAXPBX at Z
?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPAX0 at Z
+?itt_set_sync_name_v3 at internal@tbb@@YAXPAXPB_W at Z
+?itt_load_pointer_v3 at internal@tbb@@YAPAXPBX at Z
; pipeline.cpp
??0pipeline at tbb@@QAE at XZ
@@ -105,8 +108,10 @@ __TBB_machine_trylockbyte
?clear at pipeline@tbb@@QAEXXZ
?inject_token at pipeline@tbb@@AAEXAAVtask at 2@@Z
?run at pipeline@tbb@@QAEXI at Z
+?run at pipeline@tbb@@QAEXIAAVtask_group_context at 2@@Z
; queuing_rw_mutex.cpp
+?internal_construct at queuing_rw_mutex@tbb@@QAEXXZ
?acquire at scoped_lock@queuing_rw_mutex at tbb@@QAEXAAV23 at _N@Z
?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ
?release at scoped_lock@queuing_rw_mutex at tbb@@QAEXXZ
@@ -127,6 +132,7 @@ __TBB_machine_trylockbyte
#endif
; spin_rw_mutex v3
+?internal_construct at spin_rw_mutex_v3@tbb@@AAEXXZ
?internal_upgrade at spin_rw_mutex_v3@tbb@@AAE_NXZ
?internal_downgrade at spin_rw_mutex_v3@tbb@@AAEXXZ
?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AAEXXZ
@@ -137,6 +143,7 @@ __TBB_machine_trylockbyte
?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AAE_NXZ
; spin_mutex.cpp
+?internal_construct at spin_mutex@tbb@@QAEXXZ
?internal_acquire at scoped_lock@spin_mutex at tbb@@AAEXAAV23@@Z
?internal_release at scoped_lock@spin_mutex at tbb@@AAEXXZ
?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AAE_NAAV23@@Z
@@ -156,6 +163,7 @@ __TBB_machine_trylockbyte
?internal_destroy at recursive_mutex@tbb@@AAEXXZ
; queuing_mutex.cpp
+?internal_construct at queuing_mutex@tbb@@QAEXXZ
?acquire at scoped_lock@queuing_mutex at tbb@@QAEXAAV23@@Z
?release at scoped_lock@queuing_mutex at tbb@@QAEXXZ
?try_acquire at scoped_lock@queuing_mutex at tbb@@QAE_NAAV23@@Z
@@ -194,6 +202,7 @@ __TBB_machine_trylockbyte
?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IAEXHI at Z
?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IAEXXZ
?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IBEXXZ
+?assign at concurrent_queue_base_v3@internal at tbb@@IAEXABV123@@Z
#if !TBB_NO_LEGACY
; concurrent_vector.cpp v2
diff --git a/src/tbb/win64-tbb-export.def b/src/tbb/win64-tbb-export.def
index b6dc8e5..7bf5a42 100644
--- a/src/tbb/win64-tbb-export.def
+++ b/src/tbb/win64-tbb-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
@@ -87,10 +87,13 @@ __TBB_machine_pause
?handle_perror at internal@tbb@@YAXHPEBD at Z
?set_assertion_handler at tbb@@YAP6AXPEBDH00 at ZP6AX0H00@Z at Z
?runtime_warning at internal@tbb@@YAXPEBDZZ
+TBB_runtime_interface_version
; itt_notify.cpp
?itt_load_pointer_with_acquire_v3 at internal@tbb@@YAPEAXPEBX at Z
?itt_store_pointer_with_release_v3 at internal@tbb@@YAXPEAX0 at Z
+?itt_load_pointer_v3 at internal@tbb@@YAPEAXPEBX at Z
+?itt_set_sync_name_v3 at internal@tbb@@YAXPEAXPEB_W at Z
; pipeline.cpp
??_7pipeline at tbb@@6B@
@@ -101,8 +104,10 @@ __TBB_machine_pause
?clear at pipeline@tbb@@QEAAXXZ
?inject_token at pipeline@tbb@@AEAAXAEAVtask at 2@@Z
?run at pipeline@tbb@@QEAAX_K at Z
+?run at pipeline@tbb@@QEAAX_KAEAVtask_group_context at 2@@Z
; queuing_rw_mutex.cpp
+?internal_construct at queuing_rw_mutex@tbb@@QEAAXXZ
?acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAAXAEAV23 at _N@Z
?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
?release at scoped_lock@queuing_rw_mutex at tbb@@QEAAXXZ
@@ -123,6 +128,7 @@ __TBB_machine_pause
#endif
; spin_rw_mutex v3
+?internal_construct at spin_rw_mutex_v3@tbb@@AEAAXXZ
?internal_upgrade at spin_rw_mutex_v3@tbb@@AEAA_NXZ
?internal_downgrade at spin_rw_mutex_v3@tbb@@AEAAXXZ
?internal_acquire_reader at spin_rw_mutex_v3@tbb@@AEAAXXZ
@@ -133,6 +139,7 @@ __TBB_machine_pause
?internal_try_acquire_writer at spin_rw_mutex_v3@tbb@@AEAA_NXZ
; spin_mutex.cpp
+?internal_construct at spin_mutex@tbb@@QEAAXXZ
?internal_acquire at scoped_lock@spin_mutex at tbb@@AEAAXAEAV23@@Z
?internal_release at scoped_lock@spin_mutex at tbb@@AEAAXXZ
?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AEAA_NAEAV23@@Z
@@ -152,6 +159,7 @@ __TBB_machine_pause
?internal_release at scoped_lock@recursive_mutex at tbb@@AEAAXXZ
; queuing_mutex.cpp
+?internal_construct at queuing_mutex@tbb@@QEAAXXZ
?acquire at scoped_lock@queuing_mutex at tbb@@QEAAXAEAV23@@Z
?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ
?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z
@@ -190,6 +198,7 @@ __TBB_machine_pause
?internal_finish_clear at concurrent_queue_base_v3@internal at tbb@@IEAAXXZ
?internal_set_capacity at concurrent_queue_base_v3@internal at tbb@@IEAAX_J_K at Z
?internal_throw_exception at concurrent_queue_base_v3@internal at tbb@@IEBAXXZ
+?assign at concurrent_queue_base_v3@internal at tbb@@IEAAXAEBV123@@Z
#if !TBB_NO_LEGACY
; concurrent_vector.cpp v2
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
index 78a621d..afa7a78 100644
--- a/src/tbbmalloc/Customize.h
+++ b/src/tbbmalloc/Customize.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -42,6 +42,10 @@ extern "C" void mallocProcessShutdownNotification(void);
#include "tbb/tbb_stddef.h"
#define MALLOC_ASSERT(assertion, message) __TBB_ASSERT(assertion, message)
+#ifndef MALLOC_DEBUG
+#define MALLOC_DEBUG TBB_USE_DEBUG
+#endif
+
#include "tbb/tbb_machine.h"
#if DO_ITT_NOTIFY
@@ -94,17 +98,12 @@ inline intptr_t AtomicCompareExchange( volatile intptr_t& location, intptr_t new
namespace tbb {
namespace internal {
-
-void MallocInitializeITT();
-
-inline void init_tbbmalloc() {
-#if DO_ITT_NOTIFY
- MallocInitializeITT();
-#endif
-}
-
+ void init_tbbmalloc();
} } // namespaces
#define MALLOC_EXTRA_INITIALIZATION tbb::internal::init_tbbmalloc()
+// To support malloc replacement with LD_PRELOAD
+#include "proxy.h"
+
#endif /* _TBB_malloc_Customize_H_ */
diff --git a/src/tbbmalloc/LifoQueue.h b/src/tbbmalloc/LifoQueue.h
index ff998ff..95cfd2b 100644
--- a/src/tbbmalloc/LifoQueue.h
+++ b/src/tbbmalloc/LifoQueue.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,7 +32,7 @@
#include "TypeDefinitions.h"
#include <string.h> // for memset()
-//! Checking the syncronization method
+//! Checking the synchronization method
/** FINE_GRAIN_LOCKS is the only variant for now; should be defined for LifoQueue */
#ifndef FINE_GRAIN_LOCKS
#define FINE_GRAIN_LOCKS
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
index 224effb..77daff0 100644
--- a/src/tbbmalloc/MapMemory.h
+++ b/src/tbbmalloc/MapMemory.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,6 +32,7 @@
#if __linux__ || __APPLE__
#include <sys/mman.h>
+#define MEMORY_MAPPING_USES_MALLOC 0
void* MapMemory (size_t bytes)
{
void* result = 0;
@@ -51,6 +52,7 @@ int UnmapMemory(void *area, size_t bytes)
#elif _WIN32 || _WIN64
#include <windows.h>
+#define MEMORY_MAPPING_USES_MALLOC 0
void* MapMemory (size_t bytes)
{
/* Is VirtualAlloc thread safe? */
diff --git a/src/tbbmalloc/MemoryAllocator.cpp b/src/tbbmalloc/MemoryAllocator.cpp
index 9fe7776..23b0a5f 100644
--- a/src/tbbmalloc/MemoryAllocator.cpp
+++ b/src/tbbmalloc/MemoryAllocator.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,20 +26,6 @@
the GNU General Public License.
*/
-
-//#define MALLOC_TRACE
-
-#ifdef MALLOC_TRACE
-#define TRACEF printf
-#else
-static inline int TRACEF(const char *arg, ...)
-{
- return 0;
-}
-#endif /* MALLOC_TRACE */
-
-#define ASSERT_TEXT NULL
-
#include "TypeDefinitions.h"
#if USE_PTHREAD
@@ -68,15 +54,19 @@ static inline int TRACEF(const char *arg, ...)
#include <string.h>
#include <errno.h>
-#if __linux__||__APPLE__ || __FreeBSD__ || __sun
-#include <fcntl.h>
-#endif
+/********* Various compile-time options **************/
+
+#define MALLOC_TRACE 0
+
+#if MALLOC_TRACE
+#define TRACEF(x) printf x
+#else
+#define TRACEF(x) ((void)0)
+#endif /* MALLOC_TRACE */
-/**
-*** Define various compile-time options
-**/
+#define ASSERT_TEXT NULL
-//! Define the main syncronization method
+//! Define the main synchronization method
/** It should be specified before including LifoQueue.h */
#define FINE_GRAIN_LOCKS
#include "LifoQueue.h"
@@ -95,13 +85,56 @@ static inline int TRACEF(const char *arg, ...)
#include <stdlib.h>
#else
extern "C" void exit( int ); /* to not include stdlib.h */
-#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+#endif
+
+/********* End compile-time options **************/
+#if MALLOC_LD_PRELOAD
+#include <new> /* for placement new */
+#endif
namespace ThreadingSubstrate {
namespace Internal {
+/******* A helper class to support overriding malloc with scalable_malloc *******/
+#if MALLOC_LD_PRELOAD
+class recursive_malloc_call_protector {
+ static MallocMutex rmc_mutex;
+
+ MallocMutex::scoped_lock* lock_acquired;
+ char scoped_lock_space[sizeof(MallocMutex::scoped_lock)+1];
+public:
+ recursive_malloc_call_protector(bool condition) : lock_acquired(NULL) {
+ if (condition) {
+ lock_acquired = new (scoped_lock_space) MallocMutex::scoped_lock( rmc_mutex );
+ lockRecursiveMallocFlag();
+ }
+ }
+ ~recursive_malloc_call_protector() {
+ if (lock_acquired) {
+ unlockRecursiveMallocFlag();
+ lock_acquired->~scoped_lock();
+ }
+ }
+};
+
+MallocMutex recursive_malloc_call_protector::rmc_mutex;
+
+extern "C" void __TBB_internal_malloc_proxy(size_t) __attribute__ ((weak));
+extern "C" {
+static void (*malloc_proxy)(size_t) = __TBB_internal_malloc_proxy;
+}
+
+#else /* MALLOC_LD_PRELOAD */
+class recursive_malloc_call_protector {
+public:
+ recursive_malloc_call_protector(bool) {}
+ ~recursive_malloc_call_protector() {}
+};
+const bool malloc_proxy = false;
+#endif /* MALLOC_LD_PRELOAD */
+
/*********** Code to provide thread ID and a thread-local void pointer **********/
typedef intptr_t ThreadId;
@@ -116,6 +149,7 @@ static inline ThreadId getThreadId(void)
ThreadId result;
result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
if( !result ) {
+ recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
// Thread-local value is zero -> first call from this thread,
// need to initialize with next ID value (IDs start from 1)
result = AtomicIncrement(ThreadIdCount); // returned new value!
@@ -133,77 +167,37 @@ static inline void* getThreadMallocTLS() {
}
static inline void setThreadMallocTLS( void * newvalue ) {
+ recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
TlsSetValue_func( TLS_pointer_key, newvalue );
}
/*********** End code to provide thread ID and a TLS pointer **********/
-/********** Various numeric parameters controlling allocations ********/
-
-/*
- * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
- */
-static const uint32_t maxSmallObjectSize = 64;
-
-/*
- * There are 4 bins between each couple of powers of 2 [64-128-256-...]
- * from maxSmallObjectSize till this size; 16 bins in total
- */
-static const uint32_t maxSegregatedObjectSize = 1024;
-
-/*
- * And there are 5 bins with the following allocation sizes: 1792, 2688, 3968, 5376, 8064.
- * They selected to fit 9, 6, 4, 3, and 2 sizes per a block, and also are multiples of 128.
- * If sizeof(Block) changes from 128, these sizes require close attention!
- */
-static const uint32_t fittingSize1 = 1792;
-static const uint32_t fittingSize2 = 2688;
-static const uint32_t fittingSize3 = 3968;
-static const uint32_t fittingSize4 = 5376;
-static const uint32_t fittingSize5 = 8064;
-
-/*
- * Objects of this size and larger are considered large objects.
- */
-static const uint32_t minLargeObjectSize = fittingSize5 + 1;
-
/*
* This number of bins in the TLS that leads to blocks that we can allocate in.
*/
-static const uint32_t numBlockBinLimit = 32;
-static const uint32_t numBlockBins = 29;
+const uint32_t numBlockBinLimit = 32;
/*
- * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
- * we may well want to play around with this, a 4K page size is another interesting size.
- *
+ * The identifier to make sure that memory is allocated by scalable_malloc.
*/
-static const uintptr_t blockSize = 16384;
-
-/*
- * Get virtual memory in pieces of this size: 0x0100000 is 1 megabyte decimal
- */
-static size_t mmapRequestSize = 0x0100000;
-
-/********** End of numeric parameters controlling allocations *********/
+const uint64_t theMallocUniqueID=0xE3C7AF89A1E2D8C1ULL;
/********* The data structures and global objects **************/
-typedef struct FreeObject *FreeObjectPtr;
-
struct FreeObject {
- FreeObjectPtr next;
+ FreeObject *next;
};
/*
* The following constant is used to define the size of struct Block, the block header.
* The intent is to have the size of a Block multiple of the cache line size, this allows us to
* get good alignment at the cost of some overhead equal to the amount of padding included in the Block.
- */
+ */
-#define ALIGNED_SIZE 64 // 64 is a common size of a cache line
+const int blockHeaderAlignment = 64; // a common size of a cache line
-typedef struct Block* BlockPtr;
+struct Block;
/* The 'next' field in the block header has to maintain some invariants:
* it needs to be on a 16K boundary and the first field in the block.
@@ -211,7 +205,7 @@ typedef struct Block* BlockPtr;
* so that various assert work. This means that if you want to smash this memory
* for debugging purposes you will need to obey this invariant.
* The total size of the header needs to be a power of 2 to simplify
- * the alignement requirements. For now it is a 128 byte structure.
+ * the alignment requirements. For now it is a 128 byte structure.
* To avoid false sharing, the fields changed only locally are separated
* from the fields changed by foreign threads.
* Changing the size of the block header would require to change
@@ -219,27 +213,28 @@ typedef struct Block* BlockPtr;
*/
struct LocalBlockFields {
- BlockPtr next; /* This field needs to be on a 16K boundary and the first field in the block
- so non-blocking LifoQueues will work. */
- BlockPtr previous; /* Use double linked list to speed up removal */
+ Block *next; /* This field needs to be on a 16K boundary and the first field in the block
+ for LIFO lists to work. */
+ uint64_t mallocUniqueID; /* The field to identify memory allocated by scalable_malloc */
+ Block *previous; /* Use double linked list to speed up removal */
unsigned int objectSize;
unsigned int owner;
- FreeObject *bumpPtr; /* bump pointer moves from the end to the beginning of a block */
+ FreeObject *bumpPtr; /* Bump pointer moves from the end to the beginning of a block */
FreeObject *freeList;
unsigned int allocatedCount; /* Number of objects allocated (obviously by the owning thread) */
unsigned int isFull;
};
struct Block : public LocalBlockFields {
- size_t __pad_local_fields[(ALIGNED_SIZE-sizeof(LocalBlockFields))/sizeof(size_t)];
+ size_t __pad_local_fields[(blockHeaderAlignment-sizeof(LocalBlockFields))/sizeof(size_t)];
FreeObject *publicFreeList;
- BlockPtr nextPrivatizable;
- size_t __pad_public_fields[(ALIGNED_SIZE-2*sizeof(void*))/sizeof(size_t)];
+ Block *nextPrivatizable;
+ size_t __pad_public_fields[(blockHeaderAlignment-2*sizeof(void*))/sizeof(size_t)];
};
struct Bin {
- BlockPtr activeBlk;
- BlockPtr mailbox;
+ Block *activeBlk;
+ Block *mailbox;
MallocMutex mailLock;
};
@@ -248,11 +243,12 @@ struct Bin {
* the first sequence of pointers is for lists of blocks to allocate from
* the second sequence is for lists of blocks that have non-empty publicFreeList
*/
-static const uint32_t tlsSize = numBlockBinLimit * sizeof(Bin);
+const uint32_t tlsSize = numBlockBinLimit * sizeof(Bin);
/*
- * This is a lifo queue that one can init, push or pop from */
-static LifoQueue freeBlockQueue;
+ * This is a LIFO linked list that one can init, push or pop from
+ */
+static LifoQueue freeBlockList;
/*
* When a block that is not completely free is returned for reuse by other threads
@@ -265,6 +261,75 @@ static LifoQueue* globalSizeBins = (LifoQueue*)globalBinSpace;
/********* End of the data structures **************/
+/********** Various numeric parameters controlling allocations ********/
+
+/*
+ * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
+ *
+ */
+const uintptr_t blockSize = 16*1024;
+
+/*
+ * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
+ */
+const uint32_t minSmallObjectIndex = 0;
+const uint32_t numSmallObjectBins = 8;
+const uint32_t maxSmallObjectSize = 64;
+
+/*
+ * There are 4 bins between each couple of powers of 2 [64-128-256-...]
+ * from maxSmallObjectSize till this size; 16 bins in total
+ */
+const uint32_t minSegregatedObjectIndex = minSmallObjectIndex+numSmallObjectBins;
+const uint32_t numSegregatedObjectBins = 16;
+const uint32_t maxSegregatedObjectSize = 1024;
+
+/*
+ * And there are 5 bins with the following allocation sizes: 1792, 2688, 3968, 5376, 8064.
+ * They selected to fit 9, 6, 4, 3, and 2 sizes per a block, and also are multiples of 128.
+ * If sizeof(Block) changes from 128, these sizes require close attention!
+ */
+const uint32_t minFittingIndex = minSegregatedObjectIndex+numSegregatedObjectBins;
+const uint32_t numFittingBins = 5;
+
+const uint32_t fittingAlignment = 128;
+
+#define SET_FITTING_SIZE(N) ( (blockSize-sizeof(Block))/N ) & ~(fittingAlignment-1)
+const uint32_t fittingSize1 = SET_FITTING_SIZE(9);
+const uint32_t fittingSize2 = SET_FITTING_SIZE(6);
+const uint32_t fittingSize3 = SET_FITTING_SIZE(4);
+const uint32_t fittingSize4 = SET_FITTING_SIZE(3);
+const uint32_t fittingSize5 = SET_FITTING_SIZE(2);
+#undef SET_FITTING_SIZE
+
+/*
+ * Objects of this size and larger are considered large objects.
+ */
+const uint32_t minLargeObjectSize = fittingSize5 + 1;
+
+const uint32_t numBlockBins = minFittingIndex+numFittingBins;
+
+/*
+ * Get virtual memory in pieces of this size: 0x0100000 is 1 megabyte decimal
+ */
+static size_t mmapRequestSize = 0x0100000;
+
+/********** End of numeric parameters controlling allocations *********/
+
+#if __INTEL_COMPILER || _MSC_VER
+#define NOINLINE(decl) __declspec(noinline) decl
+#elif __GNUC__
+#define NOINLINE(decl) decl __attribute__ ((noinline))
+#else
+#define NOINLINE(decl) decl
+#endif
+
+static NOINLINE( Block* getPublicFreeListBlock(Bin* bin) );
+static NOINLINE( void moveBlockToBinFront(Block *block) );
+static NOINLINE( void processLessUsedBlock(Block *block) );
+
+#undef NOINLINE
+
/*********** Code to acquire memory from the OS or other executive ****************/
#if USE_DEFAULT_MEMORY_MAPPING
@@ -280,13 +345,17 @@ static LifoQueue* globalSizeBins = (LifoQueue*)globalBinSpace;
static void* getMemory (size_t bytes)
{
void *result = 0;
- MALLOC_ASSERT( bytes>=minLargeObjectSize, "request too small" );
+ // TODO: either make sure the assertion below is always valid, or remove it.
+ /*MALLOC_ASSERT( bytes>=minLargeObjectSize, "request too small" );*/
+#if MEMORY_MAPPING_USES_MALLOC
+ recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+#endif
result = MapMemory(bytes);
-#ifdef MALLOC_TRACE
+#if MALLOC_TRACE
if (!result) {
- TRACEF("ScalableMalloc trace - getMemory unsuccess, can't get %d bytes from OS\n", bytes);
+ TRACEF(( "[ScalableMalloc trace] getMemory unsuccess, can't get %d bytes from OS\n", bytes ));
} else {
- TRACEF("ScalableMalloc trace - getMemory success returning %p\n", result);
+ TRACEF(( "[ScalableMalloc trace] - getMemory success returning %p\n", result ));
}
#endif
return result;
@@ -295,9 +364,9 @@ static void* getMemory (size_t bytes)
static void returnMemory(void *area, size_t bytes)
{
int retcode = UnmapMemory(area, bytes);
-#ifdef MALLOC_TRACE
+#if MALLOC_TRACE
if (retcode) {
- TRACEF("ScalableMalloc trace - returnMemory unsuccess for %p; perhaps it has already been freed or was never allocated.\n", area);
+ TRACEF(( "[ScalableMalloc trace] returnMemory unsuccess for %p; perhaps it has already been freed or was never allocated.\n", area ));
}
#endif
return;
@@ -316,110 +385,88 @@ static void returnMemory(void *area, size_t bytes)
extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
#pragma intrinsic(_BitScanReverse)
#endif
-static inline unsigned int highestBitPos(unsigned int number)
+static inline unsigned int highestBitPos(unsigned int n)
{
unsigned int pos;
#if __ARCH_x86_32||__ARCH_x86_64
# if __linux__||__APPLE__||__FreeBSD__ || __sun
- __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(number));
+ __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(n));
# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))
__asm
{
- bsr eax, number
+ bsr eax, n
mov pos, eax
}
# elif _WIN64 && _MSC_VER>=1400
- _BitScanReverse((unsigned long*)&pos, (unsigned long)number);
+ _BitScanReverse((unsigned long*)&pos, (unsigned long)n);
# else
# error highestBitPos() not implemented for this platform
# endif
#elif __ARCH_ipf || __ARCH_other
static unsigned int bsr[16] = {0,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
- MALLOC_ASSERT( number>=64 && number<1024, ASSERT_TEXT );
- pos = bsr[ number>>6 ];
+ MALLOC_ASSERT( n>=64 && n<1024, ASSERT_TEXT );
+ pos = bsr[ n>>6 ];
#else
# error highestBitPos() not implemented for this platform
-#endif
+#endif /* __ARCH_* */
return pos;
}
/*
- * Given a size return the index into the bins for object of this size.
- *
+ * Depending on indexRequest, for a given size return either the index into the bin
+ * for objects of this size, or the actual size of objects in this bin.
*/
-static unsigned int getIndex (unsigned int size)
+template<bool indexRequest>
+static unsigned int getIndexOrObjectSize (unsigned int size)
{
- // If this fails then getIndex has problems since it doesn't return the correct index all the time.
- if (size <= maxSmallObjectSize) {
- return ((size - 1) >> 3); /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+ if (size <= maxSmallObjectSize) { // selection from 4/8/16/24/32/40/48/56/64
+ /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+ return indexRequest ? (size - 1) >> 3 : alignUp(size,8);
}
- else if (size <= maxSegregatedObjectSize ) {
- unsigned order = highestBitPos(size-1);
- MALLOC_ASSERT( order>=6 && order<=9, ASSERT_TEXT );
- return ( (size-1)>>(order-2) ) + 4*(order-5);
+ else if (size <= maxSegregatedObjectSize ) { // 80/96/112/128 / 160/192/224/256 / 320/384/448/512 / 640/768/896/1024
+ unsigned int order = highestBitPos(size-1); // which group of bin sizes?
+ MALLOC_ASSERT( 6<=order && order<=9, ASSERT_TEXT );
+ if (indexRequest)
+ return minSegregatedObjectIndex - (4*6) - 4 + (4*order) + ((size-1)>>(order-2));
+ else {
+ unsigned int alignment = 128 >> (9-order); // alignment in the group
+ MALLOC_ASSERT( alignment==16 || alignment==32 || alignment==64 || alignment==128, ASSERT_TEXT );
+ return alignUp(size,alignment);
+ }
}
else {
if( size <= fittingSize3 ) {
if( size <= fittingSize2 ) {
if( size <= fittingSize1 )
- return 24;
+ return indexRequest ? minFittingIndex : fittingSize1;
else
- return 25;
+ return indexRequest ? minFittingIndex+1 : fittingSize2;
} else
- return 26;
+ return indexRequest ? minFittingIndex+2 : fittingSize3;
} else {
if( size <= fittingSize5 ) {
if( size <= fittingSize4 )
- return 27;
+ return indexRequest ? minFittingIndex+3 : fittingSize4;
else
- return 28;
+ return indexRequest ? minFittingIndex+4 : fittingSize5;
} else {
MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
- return (unsigned)-1;
+ return ~0U;
}
}
}
}
-/*
- * Given a size return the size of the object in the block used to
- * allocate such an object.
- *
- */
-static unsigned int getAllocatedSize (unsigned int size)
+static unsigned int getIndex (unsigned int size)
{
- // If this fails then get_index has problems since it doesn't return the correct index all the time.
- if (size <= maxSmallObjectSize) {
- return ((size + 7) & ~7); /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
- }
- else if (size <= maxSegregatedObjectSize) {
- unsigned aligner = 127 >> (9-highestBitPos(size-1));
- MALLOC_ASSERT( aligner==127 || aligner==63 || aligner==31 || aligner==15, ASSERT_TEXT );
- return (size+aligner)&~aligner;
- }
- else {
- if( size <= fittingSize3 ) {
- if( size <= fittingSize2 ) {
- if( size <= fittingSize1 )
- return fittingSize1;
- else
- return fittingSize2;
- } else
- return fittingSize3;
- } else {
- if( size <= fittingSize5 ) {
- if( size <= fittingSize4 )
- return fittingSize4;
- else
- return fittingSize5;
- } else {
- MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
- return (unsigned)-1;
- }
- }
- }
+ return getIndexOrObjectSize</*indexRequest*/true>(size);
+}
+
+static unsigned int getObjectSize (unsigned int size)
+{
+ return getIndexOrObjectSize</*indexRequest*/false>(size);
}
/*
@@ -429,22 +476,22 @@ static unsigned int getAllocatedSize (unsigned int size)
/*
* Big Blocks are the blocks we get from the OS or some similar place using getMemory above.
- * They are placed on the freeBlockQueue once they are acquired.
+ * They are placed on the freeBlockList once they are acquired.
*/
static inline void *alignBigBlock(void *unalignedBigBlock)
{
void *alignedBigBlock;
/* align the entireHeap so all blocks are aligned. */
- alignedBigBlock = (void *) ( ((uintptr_t)unalignedBigBlock + blockSize - 1) & ~(blockSize - 1) );
+ alignedBigBlock = alignUp(unalignedBigBlock, blockSize);
return alignedBigBlock;
}
/* Divide the big block into smaller bigBlocks that hold this many blocks.
- * This is done since we really need a lot of blocks on the freeBlockQueue or there will be
+ * This is done since we really need a lot of blocks on the freeBlockList or there will be
* contention problems.
*/
-static const unsigned int blocksPerBigBlock = 16;
+const unsigned int blocksPerBigBlock = 16;
/* Returns 0 if unsuccessful, otherwise 1. */
static int mallocBigBlock()
@@ -459,7 +506,7 @@ static int mallocBigBlock()
unalignedBigBlock = getMemory(mmapRequestSize);
if (!unalignedBigBlock) {
- TRACEF(" in mallocBigBlock, getMemory returns 0\n");
+ TRACEF(( "[ScalableMalloc trace] in mallocBigBlock, getMemory returns 0\n" ));
/* We can't get any more memory from the OS or executive so return 0 */
return 0;
}
@@ -474,15 +521,14 @@ static int mallocBigBlock()
while ( ((uintptr_t)splitBlock + blockSize) <= (uintptr_t)bigBlockCeiling ) {
splitEdge = (void*)((uintptr_t)splitBlock + bigBlockSplitSize);
if( splitEdge > bigBlockCeiling) {
- // align down to blockSize
- splitEdge = (void*)((uintptr_t)bigBlockCeiling & ~(blockSize - 1));
+ splitEdge = alignDown(bigBlockCeiling, blockSize);
}
splitBlock->bumpPtr = (FreeObject*)splitEdge;
- freeBlockQueue.push((void**) splitBlock);
+ freeBlockList.push((void**) splitBlock);
splitBlock = (Block*)splitEdge;
}
- TRACEF("in mallocBigBlock returning 1\n");
+ TRACEF(( "[ScalableMalloc trace] in mallocBigBlock returning 1\n" ));
return 1;
}
@@ -498,61 +544,77 @@ static int mallocBigBlock()
static void initEmptyBlock(Block *block, size_t size);
static Block *getEmptyBlock(size_t size);
-static MallocMutex bootStrapBlockLock;
+static MallocMutex bootStrapLock;
-static Block *bootStrapBlock = NULL;
-static Block *bootStrapBlockUsed = NULL;
+static Block *bootStrapBlock = NULL;
+static Block *bootStrapBlockUsed = NULL;
+static FreeObject *bootStrapObjectList = NULL;
static void *bootStrapMalloc(size_t size)
{
- void *result;
+ FreeObject *result;
MALLOC_ASSERT( size == tlsSize, ASSERT_TEXT );
{ // Lock with acquire
- MallocMutex::scoped_lock scoped_cs(bootStrapBlockLock);
+ MallocMutex::scoped_lock scoped_cs(bootStrapLock);
- if (!bootStrapBlock) {
- bootStrapBlock = getEmptyBlock(size);
- }
-
- result = bootStrapBlock->bumpPtr;
- bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
- if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
- bootStrapBlock->bumpPtr = NULL;
- bootStrapBlock->next = bootStrapBlockUsed;
- bootStrapBlockUsed = bootStrapBlock;
- bootStrapBlock = NULL;
+ if( bootStrapObjectList) {
+ result = bootStrapObjectList;
+ bootStrapObjectList = bootStrapObjectList->next;
+ } else {
+ if (!bootStrapBlock) {
+ bootStrapBlock = getEmptyBlock(size);
+ }
+ result = bootStrapBlock->bumpPtr;
+ bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
+ if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
+ bootStrapBlock->bumpPtr = NULL;
+ bootStrapBlock->next = bootStrapBlockUsed;
+ bootStrapBlockUsed = bootStrapBlock;
+ bootStrapBlock = NULL;
+ }
}
-
} // Unlock with release
memset (result, 0, size);
- return result;
+ return (void*)result;
}
-/********* End rough utilitiy code **************/
+static void bootStrapFree(void* ptr)
+{
+ MALLOC_ASSERT( ptr, ASSERT_TEXT );
+ { // Lock with acquire
+ MallocMutex::scoped_lock scoped_cs(bootStrapLock);
+ ((FreeObject*)ptr)->next = bootStrapObjectList;
+ bootStrapObjectList = (FreeObject*)ptr;
+ } // Unlock with release
+}
+
+/********* End rough utility code **************/
/********* Thread and block related code *************/
-#ifdef MALLOC_DEBUG
+#if MALLOC_DEBUG>1
/* The debug version verifies the TLSBin as needed */
static void verifyTLSBin (Bin* bin, size_t size)
{
Block* temp;
Bin* tls;
uint32_t index = getIndex(size);
- uint32_t objSize = getAllocatedSize(size);
+ uint32_t objSize = getObjectSize(size);
tls = (Bin*)getThreadMallocTLS();
MALLOC_ASSERT( bin == tls+index, ASSERT_TEXT );
- if (tls[index] && tls[index].activeBlk) {
+ if (tls[index].activeBlk) {
+ MALLOC_ASSERT( tls[index].activeBlk->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
MALLOC_ASSERT( tls[index].activeBlk->owner == getThreadId(), ASSERT_TEXT );
MALLOC_ASSERT( tls[index].activeBlk->objectSize == objSize, ASSERT_TEXT );
for (temp = tls[index].activeBlk->next; temp; temp=temp->next) {
MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
+ MALLOC_ASSERT( temp->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
@@ -561,7 +623,8 @@ static void verifyTLSBin (Bin* bin, size_t size)
}
}
for (temp = tls[index].activeBlk->previous; temp; temp=temp->previous) {
- MALLOC_ASSERT( temp!=tls[index], ASSERT_TEXT );
+ MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
+ MALLOC_ASSERT( temp->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
@@ -573,7 +636,7 @@ static void verifyTLSBin (Bin* bin, size_t size)
}
#else
inline static void verifyTLSBin (Bin*, size_t) {}
-#endif
+#endif /* MALLOC_DEBUG>1 */
/*
* Add a block to the start of this tls bin list.
@@ -639,41 +702,28 @@ static void outofTLSBin (Bin* bin, Block* block)
}
/*
- * init the TLS bins and return the bin,
- * an array of *blocks initialized to NULL.
+ * Return the bin for the given size. If the TLS bin structure is absent, create it.
*/
-static Bin* initMallocTLS (void)
-{
- Bin* tls;
- int i;
- MALLOC_ASSERT( tlsSize >= sizeof(Bin) * numBlockBins, ASSERT_TEXT );
- tls = (Bin*) bootStrapMalloc(tlsSize);
- /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
-#ifdef MALLOC_DEBUG
- for (i = 0; i < numBlockBinLimit; i++) {
- MALLOC_ASSERT( tls[i].activeBlk == 0, ASSERT_TEXT );
- MALLOC_ASSERT( tls[i].mailbox == 0, ASSERT_TEXT );
- }
-#endif
- setThreadMallocTLS(tls);
- return tls;
-}
-
static Bin* getAllocationBin(size_t size)
{
- uint32_t index;
- Bin* tls;
-
- index = getIndex(size);
- tls = (Bin*)getThreadMallocTLS();
+ Bin* tls = (Bin*)getThreadMallocTLS();
if( !tls ) {
- tls = initMallocTLS();
+ MALLOC_ASSERT( tlsSize >= sizeof(Bin) * numBlockBins, ASSERT_TEXT );
+ tls = (Bin*) bootStrapMalloc(tlsSize);
+ /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
+#if MALLOC_DEBUG
+ for (int i = 0; i < numBlockBinLimit; i++) {
+ MALLOC_ASSERT( tls[i].activeBlk == 0, ASSERT_TEXT );
+ MALLOC_ASSERT( tls[i].mailbox == 0, ASSERT_TEXT );
+ }
+#endif
+ setThreadMallocTLS(tls);
}
- MALLOC_ASSERT(tls, ASSERT_TEXT);
- return tls+index;
+ MALLOC_ASSERT( tls, ASSERT_TEXT );
+ return tls+getIndex(size);
}
-static const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
+const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
static unsigned int emptyEnoughToUse (Block *mallocBlock)
{
@@ -701,16 +751,14 @@ static unsigned int emptyEnoughToUse (Block *mallocBlock)
/* Restore the bump pointer for an empty block that is planned to use */
static void restoreBumpPtr (Block *block)
{
- MALLOC_ASSERT (block->allocatedCount == 0, ASSERT_TEXT);
- MALLOC_ASSERT (block->publicFreeList == NULL, ASSERT_TEXT);
+ MALLOC_ASSERT( block->allocatedCount == 0, ASSERT_TEXT );
+ MALLOC_ASSERT( block->publicFreeList == NULL, ASSERT_TEXT );
STAT_increment(block->owner, getIndex(block->objectSize), freeRestoreBumpPtr);
block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - block->objectSize);
block->freeList = NULL;
block->isFull = 0;
}
-// #ifdef FINE_GRAIN_LOCKS
-
#if !(FREELIST_NONBLOCKING)
static MallocMutex publicFreeListLock; // lock for changes of publicFreeList
#endif
@@ -738,7 +786,7 @@ static void freePublicObject (Block *block, FreeObject *objectToFree)
temp = (FreeObject*)AtomicCompareExchange(
(intptr_t&)block->publicFreeList,
(intptr_t)objectToFree, (intptr_t)publicFreeList );
- //no backoff necessary because trying to make change, not waiting for a change
+ // no backoff necessary because trying to make change, not waiting for a change
} while( temp != publicFreeList );
#else
STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
@@ -758,22 +806,14 @@ static void freePublicObject (Block *block, FreeObject *objectToFree)
// 3) but it can not be done until the block is put to the mailbox
// So the executing thread is now the only one that can change nextPrivatizable
if( !isNotForUse(block->nextPrivatizable) ) {
- MALLOC_ASSERT(block->nextPrivatizable!=NULL, ASSERT_TEXT);
- MALLOC_ASSERT(block->owner!=0, ASSERT_TEXT);
+ MALLOC_ASSERT( block->nextPrivatizable!=NULL, ASSERT_TEXT );
+ MALLOC_ASSERT( block->owner!=0, ASSERT_TEXT );
theBin = (Bin*) block->nextPrivatizable;
-#ifdef MALLOC_DEBUG
- { // check that nextPrivatizable points to the bin the block belongs to
- uint32_t index = getIndex( block->objectSize );
- Bin* tls = (Bin*)getThreadMallocTLS();
- MALLOC_ASSERT(theBin==tls+index, ASSERT_TEXT);
- }
-#endif
-// the counter should be changed STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
MallocMutex::scoped_lock scoped_cs(theBin->mailLock);
block->nextPrivatizable = theBin->mailbox;
theBin->mailbox = block;
} else {
- MALLOC_ASSERT(block->owner==0, ASSERT_TEXT);
+ MALLOC_ASSERT( block->owner==0, ASSERT_TEXT );
}
}
STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);
@@ -792,7 +832,7 @@ static void privatizePublicFreeList (Block *mallocBlock)
temp = (FreeObject*)AtomicCompareExchange(
(intptr_t&)mallocBlock->publicFreeList,
0, (intptr_t)publicFreeList);
- //no backoff necessary because trying to make change, not waiting for a change
+ // no backoff necessary because trying to make change, not waiting for a change
} while( temp != publicFreeList );
MALLOC_ITT_SYNC_ACQUIRED(&mallocBlock->publicFreeList);
#else
@@ -805,16 +845,16 @@ static void privatizePublicFreeList (Block *mallocBlock)
temp = publicFreeList;
#endif
- MALLOC_ASSERT(publicFreeList && publicFreeList==temp, ASSERT_TEXT); // there should be something in publicFreeList!
+ MALLOC_ASSERT( publicFreeList && publicFreeList==temp, ASSERT_TEXT ); // there should be something in publicFreeList!
if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
- MALLOC_ASSERT(mallocBlock->allocatedCount <= (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ MALLOC_ASSERT( mallocBlock->allocatedCount <= (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
/* other threads did not change the counter freeing our blocks */
mallocBlock->allocatedCount--;
while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE
temp = temp->next;
mallocBlock->allocatedCount--;
}
- MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
/* merge with local freeList */
temp->next = mallocBlock->freeList;
mallocBlock->freeList = publicFreeList;
@@ -847,18 +887,19 @@ static Block* getPublicFreeListBlock (Bin* bin)
static Block *getPartialBlock(Bin* bin, unsigned int size)
{
Block *result;
- MALLOC_ASSERT(bin, ASSERT_TEXT);
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
unsigned int index = getIndex(size);
result = (Block *) globalSizeBins[index].pop();
if (result) {
+ MALLOC_ASSERT( result->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
result->next = NULL;
result->previous = NULL;
MALLOC_ASSERT( result->publicFreeList!=NULL, ASSERT_TEXT );
/* There is not a race here since no other thread owns this block */
- MALLOC_ASSERT(result->owner == 0, ASSERT_TEXT);
+ MALLOC_ASSERT( result->owner == 0, ASSERT_TEXT );
result->owner = getThreadId();
// It is safe to change nextPrivatizable, as publicFreeList is not null
- MALLOC_ASSERT(isNotForUse(result->nextPrivatizable), ASSERT_TEXT);
+ MALLOC_ASSERT( isNotForUse(result->nextPrivatizable), ASSERT_TEXT );
result->nextPrivatizable = (Block*)bin;
// the next call is required to change publicFreeList to 0
privatizePublicFreeList(result);
@@ -877,8 +918,8 @@ static Block *getPartialBlock(Bin* bin, unsigned int size)
static void returnPartialBlock(Bin* bin, Block *block)
{
unsigned int index = getIndex(block->objectSize);
- MALLOC_ASSERT(bin, ASSERT_TEXT);
- MALLOC_ASSERT (block->owner==getThreadId(), ASSERT_TEXT);
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+ MALLOC_ASSERT( block->owner==getThreadId(), ASSERT_TEXT );
STAT_increment(block->owner, index, freeBlockPublic);
// need to set publicFreeList to non-zero, so other threads
// will not change nextPrivatizable and it can be zeroed.
@@ -898,8 +939,8 @@ static void returnPartialBlock(Bin* bin, Block *block)
// another thread freed an object; we need to wait until it finishes.
// I believe there is no need for exponential backoff, as the wait here is not for a lock;
// but need to yield, so the thread we wait has a chance to run.
+ int count = 256;
while( (intptr_t)const_cast<Block* volatile &>(block->nextPrivatizable)==(intptr_t)bin ) {
- int count = 256;
if (--count==0) {
do_yield();
count = 256;
@@ -907,45 +948,46 @@ static void returnPartialBlock(Bin* bin, Block *block)
}
}
} else {
- MALLOC_ASSERT(isSolidPtr(block->publicFreeList), ASSERT_TEXT);
+ MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
}
MALLOC_ASSERT( block->publicFreeList!=NULL, ASSERT_TEXT );
// now it is safe to change our data
block->previous = NULL;
block->owner = 0;
- /* it is caller responsibility to ensure that the list of blocks
- * formed by nextPrivatizable pointers is kept consistent if required.
- * if only called from thread shutdown code, it does not matter */
+ // it is caller responsibility to ensure that the list of blocks
+ // formed by nextPrivatizable pointers is kept consistent if required.
+ // if only called from thread shutdown code, it does not matter.
(uintptr_t&)(block->nextPrivatizable) = UNUSABLE;
globalSizeBins[index].push((void **)block);
}
-// #endif /* FINE_GRAIN_LOCKS */
-
static void initEmptyBlock(Block *block, size_t size)
{
- unsigned int allocatedSize = getAllocatedSize(size);
+ // Having getIndex and getObjectSize called next to each other
+ // allows better compiler optimization as they basically share the code.
+ unsigned int index = getIndex(size);
+ unsigned int objectSize = getObjectSize(size);
Bin* tls = (Bin*)getThreadMallocTLS();
-// unsigned int allocationSpace = blockSize - sizeof(Block);
-// unsigned int objectsInBlock = allocationSpace / allocatedSize;
-#ifdef MALLOC_DEBUG
+#if MALLOC_DEBUG
memset (block, 0x0e5, blockSize);
#endif
+ block->mallocUniqueID = theMallocUniqueID;
block->next = NULL;
block->previous = NULL;
- // bump pointer should be prepared for first allocation - thus mode it down to allocatedSize
- block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - allocatedSize);
- // each block should have the address where the head of the list of "privatizable" blocks is kept
- // the only exception is a block for boot strap which is initialized when TLS is yet NULL
- block->nextPrivatizable = tls? (Block*)(tls + getIndex(size)) : NULL;
- block->allocatedCount = 0;
+ block->objectSize = objectSize;
+ block->owner = getThreadId();
+ // bump pointer should be prepared for first allocation - thus mode it down to objectSize
+ block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - objectSize);
block->freeList = NULL;
- block->publicFreeList = NULL;
+ block->allocatedCount = 0;
block->isFull = 0;
- block->objectSize = allocatedSize;
- block->owner = getThreadId();
- TRACEF ("Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
- block, block->owner, block->objectSize, block->bumpPtr);
+
+ block->publicFreeList = NULL;
+ // each block should have the address where the head of the list of "privatizable" blocks is kept
+ // the only exception is a block for boot strap which is initialized when TLS is yet NULL
+ block->nextPrivatizable = tls? (Block*)(tls + index) : NULL;
+ TRACEF(( "[ScalableMalloc trace] Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
+ block, block->owner, block->objectSize, block->bumpPtr ));
}
/* Return an empty uninitialized block in a non-blocking fashion. */
@@ -953,31 +995,29 @@ static Block *getEmptyBlock(size_t size)
{
Block *result;
Block *bigBlock;
- int success;
result = NULL;
- bigBlock = (Block *) freeBlockQueue.pop();
+ bigBlock = (Block *) freeBlockList.pop();
while (!bigBlock) {
- /* We are out of blocks so got to the OS and get another one */
- success = mallocBigBlock();
- if (!success) {
+ /* We are out of blocks so go to the OS and get another one */
+ if (!mallocBigBlock()) {
return NULL;
}
- bigBlock = (Block *) freeBlockQueue.pop();
+ bigBlock = (Block *) freeBlockList.pop();
}
// check alignment
- MALLOC_ASSERT( !( (uintptr_t)bigBlock & (uintptr_t)(blockSize-1) ), ASSERT_TEXT);
- MALLOC_ASSERT( !( (uintptr_t)bigBlock->bumpPtr & (uintptr_t)(blockSize-1) ), ASSERT_TEXT);
+ MALLOC_ASSERT( isAligned( bigBlock, blockSize ), ASSERT_TEXT );
+ MALLOC_ASSERT( isAligned( bigBlock->bumpPtr, blockSize ), ASSERT_TEXT );
// block should be at least as big as blockSize; otherwise the previous block can be damaged.
- MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT);
+ MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT );
bigBlock->bumpPtr = (FreeObject *)((uintptr_t)bigBlock->bumpPtr - blockSize);
result = (Block *)bigBlock->bumpPtr;
if ( result!=bigBlock ) {
- TRACEF("Pushing partial rest of block back on.\n");
- freeBlockQueue.push((void **)bigBlock);
+ TRACEF(( "[ScalableMalloc trace] Pushing partial rest of block back on.\n" ));
+ freeBlockList.push((void **)bigBlock);
}
initEmptyBlock(result, size);
STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
@@ -989,8 +1029,8 @@ static Block *getEmptyBlock(size_t size)
static void returnEmptyBlock (Block *block, bool keepTheBin = true)
{
// it is caller's responsibility to ensure no data is lost before calling this
- MALLOC_ASSERT(block->allocatedCount==0, ASSERT_TEXT);
- MALLOC_ASSERT(block->publicFreeList==NULL, ASSERT_TEXT);
+ MALLOC_ASSERT( block->allocatedCount==0, ASSERT_TEXT );
+ MALLOC_ASSERT( block->publicFreeList==NULL, ASSERT_TEXT );
if (keepTheBin) {
/* We should keep the TLS bin structure */
MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
@@ -998,18 +1038,20 @@ static void returnEmptyBlock (Block *block, bool keepTheBin = true)
}
STAT_increment(block->owner, getIndex(block->objectSize), freeBlockBack);
- block->allocatedCount = 0;
- // for an empty block, bump pointer should point right after the end of the block
- block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize);
- block->nextPrivatizable = NULL;
- block->freeList = NULL;
block->publicFreeList = NULL;
+ block->nextPrivatizable = NULL;
+
+ block->mallocUniqueID=0;
block->next = NULL;
block->previous = NULL;
+ block->objectSize = 0;
block->owner = (unsigned)-1;
+ // for an empty block, bump pointer should point right after the end of the block
+ block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize);
+ block->freeList = NULL;
+ block->allocatedCount = 0;
block->isFull = 0;
- block->objectSize = 0;
- freeBlockQueue.push((void **)block);
+ freeBlockList.push((void **)block);
}
inline static Block* getActiveBlock( Bin* bin )
@@ -1021,7 +1063,7 @@ inline static Block* getActiveBlock( Bin* bin )
inline static void setActiveBlock (Bin* bin, Block *block)
{
MALLOC_ASSERT( bin, ASSERT_TEXT );
- MALLOC_ASSERT(block->owner == getThreadId(), ASSERT_TEXT);
+ MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
// it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
bin->activeBlk = block;
}
@@ -1039,6 +1081,73 @@ inline static Block* setPreviousBlockActive( Bin* bin )
/********* End thread related code *************/
+/********* Library initialization *************/
+
+//! Value indicating the state of initialization.
+/* 0 = initialization not started.
+ * 1 = initialization started but not finished.
+ * 2 = initialization finished.
+ * In theory, we only need values 0 and 2. But value 1 is nonetheless
+ * useful for detecting errors in the double-check pattern.
+ */
+static int mallocInitialized; // implicitly initialized to 0
+static MallocMutex initAndShutMutex;
+
+extern "C" void mallocThreadShutdownNotification(void*);
+
+/*
+ * Allocator initialization routine;
+ * it is called lazily on the very first scalable_malloc call.
+ */
+static void initMemoryManager()
+{
+ TRACEF(( "[ScalableMalloc trace] sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n",
+ sizeof(Block), sizeof(uintptr_t) ));
+ MALLOC_ASSERT( 2*blockHeaderAlignment == sizeof(Block), ASSERT_TEXT );
+
+// Create keys for thread-local storage and for thread id
+// TODO: add error handling
+#if USE_WINTHREAD
+ TLS_pointer_key = TlsAlloc();
+ Tid_key = TlsAlloc();
+#else
+ int status1 = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
+ int status2 = pthread_key_create( &Tid_key, NULL );
+ if ( status1 || status2 ) {
+ fprintf (stderr, "The memory manager cannot create tls key during initialisation; exiting \n");
+ exit(1);
+ }
+#endif /* USE_WINTHREAD */
+ TRACEF(( "[ScalableMalloc trace] Asking for a mallocBigBlock\n" ));
+ if (!mallocBigBlock()) {
+ fprintf (stderr, "The memory manager cannot access sufficient memory to initialize; exiting \n");
+ exit(1);
+ }
+}
+
+//! Ensures that initMemoryManager() is called once and only once.
+/** Does not return until initMemoryManager() has been completed by a thread.
+ There is no need to call this routine if mallocInitialized==2 . */
+static inline void checkInitialization()
+{
+ if (mallocInitialized==2) return;
+ MallocMutex::scoped_lock lock( initAndShutMutex );
+ if (mallocInitialized!=2) {
+ MALLOC_ASSERT( mallocInitialized==0, ASSERT_TEXT );
+ mallocInitialized = 1;
+ initMemoryManager();
+#ifdef MALLOC_EXTRA_INITIALIZATION
+ recursive_malloc_call_protector scoped(/*condition=*/malloc_proxy);
+ MALLOC_EXTRA_INITIALIZATION;
+#endif
+ MALLOC_ASSERT( mallocInitialized==1, ASSERT_TEXT );
+ mallocInitialized = 2;
+ }
+ MALLOC_ASSERT( mallocInitialized==2, ASSERT_TEXT ); /* It can't be 0 or I would have initialized it */
+}
+
+/********* End library initialization *************/
+
/********* The malloc show *************/
/*
@@ -1049,25 +1158,39 @@ inline static Block* setPreviousBlockActive( Bin* bin )
*
*/
-static unsigned int isLargeObject(void *object); /* Forward Ref */
-
struct LargeObjectHeader {
void *unalignedResult; /* The base of the memory returned from getMemory, this is what is used to return this to the OS */
size_t unalignedSize; /* The size that was requested from getMemory */
+ uint64_t mallocUniqueID; /* The field to check whether the memory was allocated by scalable_malloc */
size_t objectSize; /* The size originally requested by a client */
};
-static inline void *mallocLargeObject (size_t size)
+/* A predicate checks whether an object starts on blockSize boundary */
+static inline unsigned int isLargeObject(void *object)
+{
+ return isAligned(object, blockSize);
+}
+
+static inline void *mallocLargeObject (size_t size, size_t alignment)
{
- void *result;
void *alignedArea;
void *unalignedArea;
LargeObjectHeader *header;
// TODO: can the requestedSize be optimized somehow?
- size_t requestedSize = size + sizeof(LargeObjectHeader) + blockSize;
+ size_t requestedSize = size + sizeof(LargeObjectHeader) + alignment;
#if USE_MALLOC_FOR_LARGE_OBJECT
- unalignedArea = malloc(requestedSize);
+#if MALLOC_LD_PRELOAD
+ if (malloc_proxy) {
+ if ( original_malloc_found ){
+ unalignedArea = (*original_malloc_ptr)(requestedSize);
+ }else{
+ MALLOC_ASSERT( 0, ASSERT_TEXT );
+ return NULL;
+ }
+ } else
+#endif /* MALLOC_LD_PRELOAD */
+ unalignedArea = malloc(requestedSize);
#else
unalignedArea = getMemory(requestedSize);
#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
@@ -1075,15 +1198,16 @@ static inline void *mallocLargeObject (size_t size)
/* We can't get any more memory from the OS or executive so return 0 */
return 0;
}
- alignedArea = (void *)( ((uintptr_t)unalignedArea + blockSize - 1) & ~(blockSize - 1) );
- header = (LargeObjectHeader *)alignedArea;
+ alignedArea = (void*) alignUp((uintptr_t)unalignedArea+sizeof(LargeObjectHeader),
+ alignment);
+ header = (LargeObjectHeader*) ((uintptr_t)alignedArea-sizeof(LargeObjectHeader));
header->unalignedResult = unalignedArea;
+ header->mallocUniqueID=theMallocUniqueID;
header->unalignedSize = requestedSize;
header->objectSize = size;
- result = (void *)((uintptr_t)alignedArea + sizeof(LargeObjectHeader));
- MALLOC_ASSERT(isLargeObject(result), ASSERT_TEXT);
+ MALLOC_ASSERT( isLargeObject(alignedArea), ASSERT_TEXT );
STAT_increment(getThreadId(), ThreadCommonCounters, allocLargeSize);
- return result;
+ return alignedArea;
}
static inline void freeLargeObject(void *object)
@@ -1091,26 +1215,23 @@ static inline void freeLargeObject(void *object)
LargeObjectHeader *header;
STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeSize);
header = (LargeObjectHeader *)((uintptr_t)object - sizeof(LargeObjectHeader));
+ header->mallocUniqueID = 0;
#if USE_MALLOC_FOR_LARGE_OBJECT
- free(header->unalignedResult);
+#if MALLOC_LD_PRELOAD
+ if (malloc_proxy) {
+ if ( original_malloc_found ){
+ original_free_ptr(header->unalignedResult);
+ }else{
+ MALLOC_ASSERT( 0, ASSERT_TEXT );
+ }
+ } else
+#endif /* MALLOC_LD_PRELOAD */
+ free(header->unalignedResult);
#else
returnMemory(header->unalignedResult, header->unalignedSize);
#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
}
-/* Does this object start on a 16K boundary + the size of a large object header? */
-static inline unsigned int isLargeObject(void *object)
-{
- return ((uintptr_t)object & (blockSize - 1)) == sizeof(LargeObjectHeader);
-}
-
-static inline unsigned int getLargeObjectSize(void *object)
-{
- LargeObjectHeader *header;
- header = (LargeObjectHeader *)((uintptr_t)object & ~(blockSize - 1));
- return header->objectSize;
-}
-
static FreeObject *allocateFromFreeList(Block *mallocBlock)
{
FreeObject *result;
@@ -1120,10 +1241,10 @@ static FreeObject *allocateFromFreeList(Block *mallocBlock)
}
result = mallocBlock->freeList;
- MALLOC_ASSERT (result, ASSERT_TEXT);
+ MALLOC_ASSERT( result, ASSERT_TEXT );
mallocBlock->freeList = result->next;
- MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
mallocBlock->allocatedCount++;
STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocFreeListUsed);
@@ -1139,7 +1260,7 @@ static FreeObject *allocateFromBumpPtr(Block *mallocBlock)
if ( (uintptr_t)mallocBlock->bumpPtr < (uintptr_t)mallocBlock+sizeof(Block) ) {
mallocBlock->bumpPtr = NULL;
}
- MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ MALLOC_ASSERT( mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT );
mallocBlock->allocatedCount++;
STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocBumpPtrUsed);
}
@@ -1151,104 +1272,148 @@ inline static FreeObject* allocateFromBlock( Block *mallocBlock )
FreeObject *result;
MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
- /*
- * for better cache locality, first looking in the free list
- */
+
+ /* for better cache locality, first looking in the free list. */
if ( (result = allocateFromFreeList(mallocBlock)) ) {
return result;
}
MALLOC_ASSERT( !mallocBlock->freeList, ASSERT_TEXT );
- /*
- * if free list is empty, try thread local bump pointer allocation.
- */
+
+ /* if free list is empty, try thread local bump pointer allocation. */
if ( (result = allocateFromBumpPtr(mallocBlock)) ) {
return result;
}
MALLOC_ASSERT( !mallocBlock->bumpPtr, ASSERT_TEXT );
- /*
- * the block is considered full
- */
+
+ /* the block is considered full. */
mallocBlock->isFull = 1;
return NULL;
}
-inline void* set_errno_if_NULL(void* arg)
+static void moveBlockToBinFront(Block *block)
{
- if ( arg==NULL )
- errno = ENOMEM;
- return arg;
+ Bin* bin = getAllocationBin(block->objectSize);
+ /* move the block to the front of the bin */
+ outofTLSBin(bin, block);
+ pushTLSBin(bin, block);
}
-} // namespace Internal
-} // namespace ThreadingSubstrate
-
-using namespace ThreadingSubstrate;
-using namespace ThreadingSubstrate::Internal;
-
-//! Value indicating state of package initialization.
-/* 0 = initialization not started.
- 1 = initialization started but not finished.
- 2 = initialization finished.
- In theory, we only need values 0 and 2. But value 1 is nonetheless useful for
- detecting errors in the double-check pattern. */
-static int mallocInitialized; // implicitly initialized to 0
-static MallocMutex initAndShutMutex;
-
-extern "C" void mallocThreadShutdownNotification(void*);
+static void processLessUsedBlock(Block *block)
+{
+ Bin* bin = getAllocationBin(block->objectSize);
+ if (block != getActiveBlock(bin) && block != getActiveBlock(bin)->previous ) {
+ /* We are not actively using this block; return it to the general block pool */
+ outofTLSBin(bin, block);
+ returnEmptyBlock(block);
+ } else {
+ /* all objects are free - let's restore the bump pointer */
+ restoreBumpPtr(block);
+ }
+}
/*
- * Obviously this needs to be called before malloc is available.
+ * All aligned allocations fall into one of the following categories:
+ * 1. if both request size and alignment are <= maxSegregatedObjectSize,
+ * we just align the size up, and request this amount, because for every size
+ * aligned to some power of 2, the allocated object is at least that aligned.
+ * 2. for bigger size, check if already guaranteed fittingAlignment is enough.
+ * 3. if size+alignment<minLargeObjectSize, we take an object of fittingSizeN and align
+ * its address up; given such pointer, scalable_free could find the real object.
+ * 4. otherwise, aligned large object is allocated.
*/
-/* THIS IS DONE ON-DEMAND ON FIRST MALLOC, SO ASSUME MANUAL CALL TO IT IS NOT REQUIRED */
-static void initMemoryManager()
+static void *allocateAligned(size_t size, size_t alignment)
{
- int result;
- TRACEF("sizeof(Block) is %d (expected 128); sizeof(uintptr_t) is %d\n", sizeof(Block), sizeof(uintptr_t));
- MALLOC_ASSERT( 2*ALIGNED_SIZE == sizeof(Block), ASSERT_TEXT );
+ MALLOC_ASSERT( isPowerOfTwo(alignment), ASSERT_TEXT );
-// Create keys for thread-local storage and for thread id
-// TODO: add error handling
-#if USE_WINTHREAD
- TLS_pointer_key = TlsAlloc();
- Tid_key = TlsAlloc();
-#else
- int status = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
- status = pthread_key_create( &Tid_key, NULL );
-#endif /* USE_WINTHREAD */
- // no more necessary: lifoQueueInit(&freeBlockQueue);
- TRACEF("Asking for a mallocBigBlock\n");
- result = mallocBigBlock();
- if (!result) {
- printf ("The memory manager cannot access sufficient memory to initialize; aborting \n");
- exit(0);
+ void *result;
+ if (size<=maxSegregatedObjectSize && alignment<=maxSegregatedObjectSize)
+ result = scalable_malloc(alignUp(size? size: sizeof(size_t), alignment));
+ else if (alignment<=fittingAlignment)
+ result = scalable_malloc(size);
+ else if (size+alignment < minLargeObjectSize) {
+ void *unaligned = scalable_malloc(size+alignment);
+ if (!unaligned) return NULL;
+ result = alignUp(unaligned, alignment);
+ } else {
+ /* This can be the first allocation call. */
+ checkInitialization();
+ /* To correctly detect kind of allocation in scalable_free we need
+ to distinguish memory allocated as large object.
+ This is done via alignment that is greater than can be found in Block.
+ */
+ result = mallocLargeObject(size, blockSize>alignment? blockSize: alignment);
}
+
+ MALLOC_ASSERT( isAligned(result, alignment), ASSERT_TEXT );
+ return result;
}
-//! Ensures that initMemoryManager() is called once and only once.
-/** Does not return until initMemoryManager() has been completed by a thread.
- There is no need to call this routine if mallocInitialized==2 . */
-static void checkInitialization()
+static void *reallocAligned(void *ptr, size_t size, size_t alignment = 0)
{
- MallocMutex::scoped_lock lock( initAndShutMutex );
- if(mallocInitialized!=2) {
- MALLOC_ASSERT(mallocInitialized==0, ASSERT_TEXT);
- mallocInitialized = 1;
- initMemoryManager();
-#ifdef MALLOC_EXTRA_INITIALIZATION
- MALLOC_EXTRA_INITIALIZATION;
-#endif /* MALLOC_EXTRA_INITIALIZATION */
- MALLOC_ASSERT(mallocInitialized==1, ASSERT_TEXT);
- mallocInitialized = 2;
+ void *result;
+ size_t copySize;
+
+ if (isLargeObject(ptr)) {
+ LargeObjectHeader* loh = (LargeObjectHeader *)((uintptr_t)ptr - sizeof(LargeObjectHeader));
+ MALLOC_ASSERT( loh->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+ copySize = loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
+ if (size <= copySize) {
+ loh->objectSize = size;
+ return ptr;
+ } else {
+ copySize = loh->objectSize;
+ result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
+ }
+ } else {
+ Block* block = (Block *)alignDown(ptr, blockSize);
+ MALLOC_ASSERT( block->mallocUniqueID==theMallocUniqueID, ASSERT_TEXT );
+ copySize = block->objectSize;
+ if (size <= copySize) {
+ return ptr;
+ } else {
+ result = alignment ? allocateAligned(size, alignment) : scalable_malloc(size);
+ }
}
- MALLOC_ASSERT(mallocInitialized==2, ASSERT_TEXT); /* It can't be 0 or I would have initialized it */
+ if (result) {
+ memcpy(result, ptr, copySize<size? copySize: size);
+ scalable_free(ptr);
+ }
+ return result;
}
+/* A predicate checks if an object is properly placed inside its block */
+static inline bool isProperlyPlaced(const void *object, const Block *block)
+{
+ return 0 == ((uintptr_t)block + blockSize - (uintptr_t)object) % block->objectSize;
+}
+
+/* Finds the real object inside the block */
+static inline FreeObject *findAllocatedObject(const void *address, const Block *block)
+{
+ // calculate offset from the end of the block space
+ uintptr_t offset = (uintptr_t)block + blockSize - (uintptr_t)address;
+ MALLOC_ASSERT( offset<blockSize-sizeof(Block), ASSERT_TEXT );
+ // find offset difference from a multiple of allocation size
+ offset %= block->objectSize;
+ // and move the address down to where the real object starts.
+ return (FreeObject*)((uintptr_t)address - (offset? block->objectSize-offset: 0));
+}
+
+} // namespace Internal
+} // namespace ThreadingSubstrate
+
+using namespace ThreadingSubstrate;
+using namespace ThreadingSubstrate::Internal;
+
/*
- * When a thread is shuting down this routine should be called to remove all the thread ids
+ * When a thread is shutting down this routine should be called to remove all the thread ids
* from the malloc blocks and replace them with a NULL thread id.
*
*/
+#if MALLOC_TRACE
static unsigned int threadGoingDownCount = 0;
+#endif
+
/*
* for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
* it will be automatically called at thread exit with the key value as the argument.
@@ -1268,7 +1433,8 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
if ( mallocInitialized == 0 ) return;
}
- TRACEF("Thread id %d blocks return start %d\n", getThreadId(), threadGoingDownCount++);
+ TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return start %d\n",
+ getThreadId(), threadGoingDownCount++ ));
#ifdef USE_WINTHREAD
tls = (Bin*)getThreadMallocTLS();
#else
@@ -1302,7 +1468,8 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
}
tls[index].activeBlk = 0;
}
- // TODO - Free up this tls stuff..... somehow free the tls structure... then call setThreadMallocTLS(0);
+ bootStrapFree((void*)tls);
+ setThreadMallocTLS(NULL);
}
#ifndef USE_WINTHREAD
@@ -1312,7 +1479,7 @@ extern "C" void mallocThreadShutdownNotification(void* arg)
#endif
#endif
- TRACEF("Thread id %d blocks return end\n", getThreadId());
+ TRACEF(( "[ScalableMalloc trace] Thread id %d blocks return end\n", getThreadId() ));
}
extern "C" void mallocProcessShutdownNotification(void)
@@ -1334,17 +1501,18 @@ extern "C" void * scalable_malloc(size_t size)
Block * mallocBlock;
FreeObject *result;
- if( !size ) size = sizeof(size_t);
+ if (!size) size = sizeof(size_t);
+
+ /* This returns only after malloc is initialized */
+ checkInitialization();
- if (mallocInitialized!=2) {
- /* This returns only after malloc is initialized */
- checkInitialization();
- }
/*
* Use Large Object Allocation
*/
if (size >= minLargeObjectSize) {
- return set_errno_if_NULL( mallocLargeObject(size) );
+ result = (FreeObject*)mallocLargeObject(size, blockSize);
+ if (!result) errno = ENOMEM;
+ return result;
}
/*
@@ -1370,8 +1538,8 @@ extern "C" void * scalable_malloc(size_t size)
* else privatize publicly freed objects in some block and allocate from it
*/
mallocBlock = getPublicFreeListBlock( bin );
- if( mallocBlock ) {
- if( emptyEnoughToUse(mallocBlock) ) {
+ if (mallocBlock) {
+ if (emptyEnoughToUse(mallocBlock)) {
/* move the block to the front of the bin */
outofTLSBin(bin, mallocBlock);
pushTLSBin(bin, mallocBlock);
@@ -1381,7 +1549,7 @@ extern "C" void * scalable_malloc(size_t size)
return result;
}
/* Else something strange happened, need to retry from the beginning; */
- TRACEF("This isn't correct reasonable local block disappears --- ScalableMalloc\n");
+ TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in public free list; reentering.\n" ));
return scalable_malloc(size);
}
@@ -1411,13 +1579,13 @@ extern "C" void * scalable_malloc(size_t size)
return result;
}
/* Else something strange happened, need to retry from the beginning; */
- TRACEF("This isn't correct reasonable local block disappears --- ScalableMalloc\n");
+ TRACEF(( "[ScalableMalloc trace] Something is wrong: no objects in empty block; reentering.\n" ));
return scalable_malloc(size);
}
/*
* else nothing works so return NULL
*/
- TRACEF("NULL Back; \n");
+ TRACEF(( "[ScalableMalloc trace] No memory found, returning NULL.\n" ));
errno = ENOMEM;
return NULL;
}
@@ -1440,128 +1608,197 @@ extern "C" void scalable_free (void *object) {
return;
}
- objectToFree = (FreeObject *)object;
-
myTid = getThreadId();
- block = (Block *) ((uintptr_t)object & ~(blockSize - 1));/* mask low bits to get the block */
- MALLOC_ASSERT (block->allocatedCount, ASSERT_TEXT);
+ block = (Block *)alignDown(object, blockSize);/* mask low bits to get the block */
+ MALLOC_ASSERT( block->mallocUniqueID == theMallocUniqueID, ASSERT_TEXT );
+ MALLOC_ASSERT( block->allocatedCount, ASSERT_TEXT );
+
+ // Due to aligned allocations, a pointer passed to scalable_free
+ // might differ from the address of internally allocated object.
+ // Small objects however should always be fine.
+ if (block->objectSize <= maxSegregatedObjectSize)
+ objectToFree = (FreeObject*)object;
+ // "Fitting size" allocations are suspicious if aligned higher than naturally
+ else {
+ if ( ! isAligned(object,2*fittingAlignment) )
+ // TODO: the above check is questionable - it gives false negatives in ~50% cases,
+ // so might even be slower in average than unconditional use of findAllocatedObject.
+ // here it should be a "real" object
+ objectToFree = (FreeObject*)object;
+ else
+ // here object can be an aligned address, so applying additional checks
+ objectToFree = findAllocatedObject(object, block);
+ MALLOC_ASSERT( isAligned(objectToFree,fittingAlignment), ASSERT_TEXT );
+ }
+ MALLOC_ASSERT( isProperlyPlaced(objectToFree, block), ASSERT_TEXT );
if (myTid == block->owner) {
- ((FreeObject *)object)->next = block->freeList;
- block->freeList = (FreeObject *) object;
+ objectToFree->next = block->freeList;
+ block->freeList = objectToFree;
block->allocatedCount--;
- MALLOC_ASSERT(block->allocatedCount < (blockSize-sizeof(Block))/block->objectSize, ASSERT_TEXT);
- Bin* bin = getAllocationBin(block->objectSize);
+ MALLOC_ASSERT( block->allocatedCount < (blockSize-sizeof(Block))/block->objectSize, ASSERT_TEXT );
#if COLLECT_STATISTICS
- if (getActiveBlock(bin) != block)
+ if (getActiveBlock(getAllocationBin(block->objectSize)) != block)
STAT_increment(myTid, getIndex(block->objectSize), freeToInactiveBlock);
else
STAT_increment(myTid, getIndex(block->objectSize), freeToActiveBlock);
#endif
- if (block->isFull && emptyEnoughToUse(block)) {
- /* move the block to the front of the bin */
- outofTLSBin(bin, block);
- pushTLSBin(bin, block);
+ if (block->isFull) {
+ if (emptyEnoughToUse(block))
+ moveBlockToBinFront(block);
} else {
- if (block->allocatedCount==0 && block->publicFreeList==NULL) {
- if (block != getActiveBlock(bin) && block != getActiveBlock(bin)->previous ) {
- /* We are not actively using this block; return it to the general block pool */
- outofTLSBin(bin, block);
- returnEmptyBlock(block);
- } else {
- /* all objects are free - let's restore the bump pointer */
- restoreBumpPtr(block);
- }
- }
+ if (block->allocatedCount==0 && block->publicFreeList==NULL)
+ processLessUsedBlock(block);
}
- } else { /* Slower path to add to multi writer queue, the allocatedCount is updated by the owner thread in malloc. */
+ } else { /* Slower path to add to the shared list, the allocatedCount is updated by the owner thread in malloc. */
freePublicObject (block, objectToFree);
}
}
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void safer_scalable_free (void *object, void (*original_free)(void*))
+{
+ if (!object)
+ return;
+
+ // Check if the memory was allocated by scalable_malloc
+ uint64_t id = isLargeObject(object)?
+ ((LargeObjectHeader*)((uintptr_t)object-sizeof(LargeObjectHeader)))->mallocUniqueID:
+ ((Block *)alignDown(object, blockSize))->mallocUniqueID;
+ if (id==theMallocUniqueID)
+ scalable_free(object);
+ else if (original_free)
+ original_free(object);
+}
+
/********* End the free code *************/
/********* Code for scalable_realloc ***********/
/*
* From K&R
- * "realloc changes the size of the object pointer to by p to size. The contents will
+ * "realloc changes the size of the object pointed to by p to size. The contents will
* be unchanged up to the minimum of the old and the new sizes. If the new size is larger,
* the new space is uninitialized. realloc returns a pointer to the new space, or
* NULL if the request cannot be satisfied, in which case *p is unchanged."
*
*/
-extern "C" void* scalable_realloc(void* ptr, size_t sz)
+extern "C" void* scalable_realloc(void* ptr, size_t size)
{
- void *result;
- Block* block;
- size_t copySize;
-
- if (ptr==NULL) {
- return scalable_malloc(sz);
+ /* corner cases left out of reallocAligned to not deal with errno there */
+ if (!ptr) {
+ return scalable_malloc(size);
}
-
- if (sz == 0) {
+ if (!size) {
scalable_free(ptr);
return NULL;
}
- block = (Block *) ((uintptr_t)ptr & ~(blockSize - 1)); /* mask low bits to get the block */
- if (isLargeObject(ptr)) {
- LargeObjectHeader* loh = (LargeObjectHeader*)block;
- copySize = loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
- if (sz < copySize) {
- loh->objectSize = sz;
- return ptr;
- }
- else {
- copySize = loh->objectSize;
- result = scalable_malloc(sz);
- }
- } else {
- copySize = block->objectSize;
- if (sz < copySize) {
- return ptr;
- } else {
- result = scalable_malloc(sz);
- }
- }
- if (copySize > sz) {
- copySize = sz;
- }
+ void* tmp = reallocAligned(ptr, size, 0);
+ if (!tmp) errno = ENOMEM;
+ return tmp;
+}
- if (result) {
- memcpy(result, ptr, copySize);
- scalable_free(ptr);
- } else {
- errno = ENOMEM;
+/*
+ * A variant that provides additional memory safety, by checking whether the given address
+ * was obtained with this allocator, and if not redirecting to the provided alternative call.
+ */
+extern "C" void* safer_scalable_realloc (void* ptr, size_t sz, void* (*original_realloc)(void*,size_t))
+{
+ if (!ptr) {
+ return scalable_malloc(sz);
}
- return result;
+ // Check if the memory was allocated by scalable_malloc
+ uint64_t id = isLargeObject(ptr)?
+ ((LargeObjectHeader*)((uintptr_t)ptr-sizeof(LargeObjectHeader)))->mallocUniqueID:
+ ((Block *)alignDown(ptr, blockSize))->mallocUniqueID;
+ if (id==theMallocUniqueID) {
+ if (!sz) {
+ scalable_free(ptr);
+ return NULL;
+ }
+ void* tmp = reallocAligned(ptr, sz, 0);
+ if (!tmp) errno = ENOMEM;
+ return tmp;
+ }
+ else if (original_realloc)
+ return original_realloc(ptr,sz);
+ else
+ return NULL;
}
-
/********* End code for scalable_realloc ***********/
/********* Code for scalable_calloc ***********/
/*
* From K&R
- * calloc returns a pointer to space for an array of nobj objects, each of size size,
- * or NULL if the request cannot be satisfied. The sapce is initialized to zero bytes.
+ * calloc returns a pointer to space for an array of nobj objects,
+ * each of size size, or NULL if the request cannot be satisfied.
+ * The space is initialized to zero bytes.
*
*/
extern "C" void * scalable_calloc(size_t nobj, size_t size)
{
- void *result;
- size_t arraySize;
- arraySize = nobj * size;
- result = scalable_malloc(arraySize);
- if (result) {
+ size_t arraySize = nobj * size;
+ void* result = scalable_malloc(arraySize);
+ if (result)
memset(result, 0, arraySize);
- }
return result;
}
/********* End code for scalable_calloc ***********/
+/********* Code for aligned allocation API **********/
+
+extern "C" int scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
+{
+ if ( !isPowerOfTwoMultiple(alignment, sizeof(void*)) )
+ return EINVAL;
+ void *result = allocateAligned(size, alignment);
+ if (!result)
+ return ENOMEM;
+ *memptr = result;
+ return 0;
+}
+
+extern "C" void * scalable_aligned_malloc(size_t size, size_t alignment)
+{
+ if (!isPowerOfTwo(alignment)) {
+ errno = EINVAL;
+ return NULL;
+ }
+ void* tmp = allocateAligned(size, alignment);
+ if (!tmp) errno = ENOMEM;
+ return tmp;
+}
+
+extern "C" void * scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
+{
+ /* corner cases left out of reallocAligned to not deal with errno there */
+ if (!isPowerOfTwo(alignment)) {
+ errno = EINVAL;
+ return NULL;
+ }
+ if (!ptr) {
+ return allocateAligned(size, alignment);
+ }
+ if (!size) {
+ scalable_free(ptr);
+ return NULL;
+ }
+ void* tmp = reallocAligned(ptr, size, alignment);
+ if (!tmp) errno = ENOMEM;
+ return tmp;
+}
+
+extern "C" void scalable_aligned_free(void *ptr)
+{
+ scalable_free(ptr);
+}
+
+/********* end code for aligned allocation API **********/
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
index 0227fc8..62e1bf0 100644
--- a/src/tbbmalloc/Statistics.h
+++ b/src/tbbmalloc/Statistics.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/tbbmalloc/TypeDefinitions.h b/src/tbbmalloc/TypeDefinitions.h
index b669a6d..074f658 100644
--- a/src/tbbmalloc/TypeDefinitions.h
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -58,6 +58,7 @@
#if _WIN32
#include <stddef.h>
typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
#else
#include <stdint.h>
#endif
@@ -65,4 +66,37 @@ typedef unsigned __int32 uint32_t;
//! PROVIDE YOUR OWN Customize.h IF YOU FEEL NECESSARY
#include "Customize.h"
+/*
+ * Functions to align an integer down or up to the given power of two,
+ * and test for such an alignment, and for power of two.
+ */
+template<typename T>
+static inline T alignDown(T arg, uintptr_t alignment) {
+ return T( (uintptr_t)arg & ~(alignment-1));
+}
+template<typename T>
+static inline T alignUp (T arg, uintptr_t alignment) {
+ return T(((uintptr_t)arg+(alignment-1)) & ~(alignment-1));
+ // /*is this better?*/ return (((uintptr_t)arg-1) | (alignment-1)) + 1;
+}
+template<typename T>
+static inline bool isAligned(T arg, uintptr_t alignment) {
+ return 0==((uintptr_t)arg & (alignment-1));
+}
+static inline bool isPowerOfTwo(uintptr_t arg) {
+ return arg && (0==(arg & (arg-1)));
+}
+static inline bool isPowerOfTwoMultiple(uintptr_t arg, uintptr_t divisor) {
+ // Divisor is assumed to be a power of two (which is valid for current uses).
+ MALLOC_ASSERT( isPowerOfTwo(divisor), "Divisor should be a power of two" );
+ return arg && (0==(arg & (arg-divisor)));
+}
+
+void lockRecursiveMallocFlag();
+void unlockRecursiveMallocFlag();
+
+extern bool original_malloc_found;
+extern void* (*original_malloc_ptr)(size_t);
+extern void (*original_free_ptr)(void*);
+
#endif /* _itt_shared_malloc_TypeDefinitions_H_ */
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin-tbbmalloc-export.def
index 7c68402..66db63d 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin-tbbmalloc-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,5 +32,14 @@ scalable_calloc;
scalable_free;
scalable_malloc;
scalable_realloc;
+scalable_posix_memalign;
+scalable_aligned_malloc;
+scalable_aligned_realloc;
+scalable_aligned_free;
+__TBB_internal_calloc;
+__TBB_internal_free;
+__TBB_internal_malloc;
+__TBB_internal_realloc;
+__TBB_internal_posix_memalign;
local:*;
};
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin32-proxy-export.def
similarity index 78%
copy from src/tbbmalloc/lin-tbbmalloc-export.def
copy to src/tbbmalloc/lin32-proxy-export.def
index 7c68402..e5188dc 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin32-proxy-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,9 +28,25 @@
{
global:
-scalable_calloc;
-scalable_free;
-scalable_malloc;
-scalable_realloc;
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_internal_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv; /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znaj;
+_ZnajRKSt9nothrow_t;
+_Znwj;
+_ZnwjRKSt9nothrow_t;
local:*;
};
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin64-proxy-export.def
similarity index 78%
copy from src/tbbmalloc/lin-tbbmalloc-export.def
copy to src/tbbmalloc/lin64-proxy-export.def
index 7c68402..989521d 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64-proxy-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,9 +28,25 @@
{
global:
-scalable_calloc;
-scalable_free;
-scalable_malloc;
-scalable_realloc;
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_internal_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv; /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znam;
+_ZnamRKSt9nothrow_t;
+_Znwm;
+_ZnwmRKSt9nothrow_t;
local:*;
};
diff --git a/src/tbbmalloc/lin-tbbmalloc-export.def b/src/tbbmalloc/lin64ipf-proxy-export.def
similarity index 78%
copy from src/tbbmalloc/lin-tbbmalloc-export.def
copy to src/tbbmalloc/lin64ipf-proxy-export.def
index 7c68402..989521d 100644
--- a/src/tbbmalloc/lin-tbbmalloc-export.def
+++ b/src/tbbmalloc/lin64ipf-proxy-export.def
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,9 +28,25 @@
{
global:
-scalable_calloc;
-scalable_free;
-scalable_malloc;
-scalable_realloc;
+calloc;
+free;
+malloc;
+realloc;
+posix_memalign;
+memalign;
+valloc;
+pvalloc;
+mallinfo;
+mallopt;
+__TBB_internal_malloc_proxy;
+__TBB_internal_find_original_malloc;
+_ZdaPv; /* next ones are new/delete */
+_ZdaPvRKSt9nothrow_t;
+_ZdlPv;
+_ZdlPvRKSt9nothrow_t;
+_Znam;
+_ZnamRKSt9nothrow_t;
+_Znwm;
+_ZnwmRKSt9nothrow_t;
local:*;
};
diff --git a/src/tbbmalloc/mac32-tbbmalloc-export.def b/src/tbbmalloc/mac32-tbbmalloc-export.def
index 27b719b..6736ba0 100644
--- a/src/tbbmalloc/mac32-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -29,3 +29,7 @@ _scalable_calloc
_scalable_free
_scalable_malloc
_scalable_realloc
+_scalable_posix_memalign
+_scalable_aligned_malloc
+_scalable_aligned_realloc
+_scalable_aligned_free
diff --git a/src/tbbmalloc/mac64-tbbmalloc-export.def b/src/tbbmalloc/mac64-tbbmalloc-export.def
index 27b719b..6736ba0 100644
--- a/src/tbbmalloc/mac64-tbbmalloc-export.def
+++ b/src/tbbmalloc/mac64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-# Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+# Copyright 2005-2009 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
@@ -29,3 +29,7 @@ _scalable_calloc
_scalable_free
_scalable_malloc
_scalable_realloc
+_scalable_posix_memalign
+_scalable_aligned_malloc
+_scalable_aligned_realloc
+_scalable_aligned_free
diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
new file mode 100644
index 0000000..d1309fa
--- /dev/null
+++ b/src/tbbmalloc/proxy.cpp
@@ -0,0 +1,179 @@
+/*
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "proxy.h"
+
+#if MALLOC_LD_PRELOAD
+
+/*** service functions and variables ***/
+
+#include <unistd.h> // for sysconf
+#include <dlfcn.h>
+
+static long memoryPageSize;
+
+static inline void initPageSize()
+{
+ memoryPageSize = sysconf(_SC_PAGESIZE);
+}
+
+/* For the expected behaviour (i.e., finding malloc/free/etc from libc.so,
+ not from ld-linux.so) dlsym(RTLD_NEXT) should be called from
+ a LD_PRELOADed library, not another dynamic library.
+ So we have to put find_original_malloc here.
+ */
+extern "C" bool __TBB_internal_find_original_malloc(int num, const char *names[],
+ void *ptrs[])
+{
+ for (int i=0; i<num; i++)
+ if (NULL == (ptrs[i] = dlsym (RTLD_NEXT, names[i])))
+ return false;
+
+ return true;
+}
+
+/* __TBB_internal_malloc_proxy used as a weak symbol by libtbbmalloc for:
+ 1) detection that the proxy library is loaded
+ 2) check that dlsym("malloc") found something different from our replacement malloc
+*/
+extern "C" void __TBB_internal_malloc_proxy() __attribute__ ((alias ("malloc")));
+
+#ifndef __THROW
+#define __THROW
+#endif
+
+/*** replacements for malloc and the family ***/
+
+extern "C" {
+
+void *malloc(size_t size) __THROW
+{
+ return __TBB_internal_malloc(size);
+}
+
+void * calloc(size_t num, size_t size) __THROW
+{
+ return __TBB_internal_calloc(num, size);
+}
+
+void free(void *object) __THROW
+{
+ __TBB_internal_free(object);
+}
+
+void * realloc(void* ptr, size_t sz) __THROW
+{
+ return __TBB_internal_realloc(ptr, sz);
+}
+
+int posix_memalign(void **memptr, size_t alignment, size_t size) __THROW
+{
+ return __TBB_internal_posix_memalign(memptr, alignment, size);
+}
+
+/* The older *NIX interface for aligned allocations;
+ it's formally substituted by posix_memalign and deprecated,
+ so we do not expect it to cause cyclic dependency with C RTL. */
+void * memalign(size_t alignment, size_t size) __THROW
+{
+ return scalable_aligned_malloc(size, alignment);
+}
+
+/* valloc allocates memory aligned on a page boundary */
+void * valloc(size_t size) __THROW
+{
+ if (! memoryPageSize) initPageSize();
+
+ return scalable_aligned_malloc(size, memoryPageSize);
+}
+
+/* pvalloc allocates smallest set of complete pages which can hold
+ the requested number of bytes. Result is aligned on page boundary. */
+void * pvalloc(size_t size) __THROW
+{
+ if (! memoryPageSize) initPageSize();
+ // align size up to the page size
+ size = ((size-1) | (memoryPageSize-1)) + 1;
+
+ return scalable_aligned_malloc(size, memoryPageSize);
+}
+
+int mallopt(int /*param*/, int /*value*/) __THROW
+{
+ return 1;
+}
+
+} /* extern "C" */
+
+#if __linux__
+#include <malloc.h>
+#include <string.h> // for memset
+
+extern "C" struct mallinfo mallinfo() __THROW
+{
+ struct mallinfo m;
+ memset(&m, 0, sizeof(struct mallinfo));
+
+ return m;
+}
+#endif /* __linux__ */
+
+/*** replacements for global operators new and delete ***/
+
+#include <new>
+
+void * operator new(size_t sz) throw (std::bad_alloc) {
+ void *res = scalable_malloc(sz);
+ if (NULL == res) throw std::bad_alloc();
+ return res;
+}
+void* operator new[](size_t sz) throw (std::bad_alloc) {
+ void *res = scalable_malloc(sz);
+ if (NULL == res) throw std::bad_alloc();
+ return res;
+}
+void operator delete(void* ptr) throw() {
+ scalable_free(ptr);
+}
+void operator delete[](void* ptr) throw() {
+ scalable_free(ptr);
+}
+void* operator new(size_t sz, const std::nothrow_t&) throw() {
+ return scalable_malloc(sz);
+}
+void* operator new[](std::size_t sz, const std::nothrow_t&) throw() {
+ return scalable_malloc(sz);
+}
+void operator delete(void* ptr, const std::nothrow_t&) throw() {
+ scalable_free(ptr);
+}
+void operator delete[](void* ptr, const std::nothrow_t&) throw() {
+ scalable_free(ptr);
+}
+
+#endif /* MALLOC_LD_PRELOAD */
diff --git a/include/tbb/machine/ibm_aix51.h b/src/tbbmalloc/proxy.h
similarity index 58%
copy from include/tbb/machine/ibm_aix51.h
copy to src/tbbmalloc/proxy.h
index 8df0e9a..ff12deb 100644
--- a/include/tbb/machine/ibm_aix51.h
+++ b/src/tbbmalloc/proxy.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,27 +26,30 @@
the GNU General Public License.
*/
-#ifndef __TBB_machine_H
-#error Do not include this file directly; include tbb_machine.h instead
-#endif
+#ifndef _TBB_malloc_proxy_H_
+#define _TBB_malloc_proxy_H_
-#define __TBB_WORDSIZE 8
-#define __TBB_BIG_ENDIAN 1
+#if __linux__
+#define MALLOC_LD_PRELOAD 1
+#endif
-#include <stdint.h>
-#include <unistd.h>
-#include <sched.h>
+#include <stddef.h>
extern "C" {
-
-int32_t __TBB_machine_cas_32 (volatile void* ptr, int32_t value, int32_t comparand);
-int64_t __TBB_machine_cas_64 (volatile void* ptr, int64_t value, int64_t comparand);
-#define __TBB_fence_for_acquire() __TBB_machine_flush ()
-#define __TBB_fence_for_release() __TBB_machine_flush ()
-
-}
-
-#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cas_32(P,V,C)
-#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cas_64(P,V,C)
-#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cas_64(P,V,C)
-#define __TBB_Yield() sched_yield()
+ void * scalable_malloc(size_t size);
+ void * scalable_calloc(size_t nobj, size_t size);
+ void scalable_free(void *object);
+ void * scalable_realloc(void* ptr, size_t size);
+ void * scalable_aligned_malloc(size_t size, size_t alignment);
+ int scalable_posix_memalign(void **memptr, size_t alignment, size_t size);
+
+ void * __TBB_internal_malloc(size_t size);
+ void * __TBB_internal_calloc(size_t num, size_t size);
+ void __TBB_internal_free(void *object);
+ void * __TBB_internal_realloc(void* ptr, size_t sz);
+ int __TBB_internal_posix_memalign(void **memptr, size_t alignment, size_t size);
+
+ bool __TBB_internal_find_original_malloc(int num, const char *names[], void *table[]);
+} // extern "C"
+
+#endif /* _TBB_malloc_proxy_H_ */
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
index 769c5a6..8796ada 100644
--- a/src/tbbmalloc/tbbmalloc.cpp
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,18 +27,46 @@
*/
#define INSTANTIATE_ITT_NOTIFY 1
-#include "Customize.h"
+#include "TypeDefinitions.h" // Customize.h and proxy.h get included
-#define DoOneTimeInitializations __TBB_malloc_DoOneTimeInitializations_stub
+#define ITT_DoOneTimeInitialization __TBB_malloc_ITT_DoOneTimeInitialization_stub
#include "tbb/itt_notify.cpp"
+#if MALLOC_LD_PRELOAD
+
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+#if __sun
+#include <string.h> /* for memset */
+#include <errno.h>
+#endif
+
+extern "C" {
+
+void safer_scalable_free( void*, void (*)(void*) );
+void * safer_scalable_realloc( void*, size_t, void* (*)(void*,size_t) );
+
+bool __TBB_internal_find_original_malloc(int num, const char *names[], void *table[]) __attribute__ ((weak));
+
+void * __TBB_internal_malloc_proxy(size_t) __attribute__ ((weak));
+static void * (*malloc_proxy)(size_t) = __TBB_internal_malloc_proxy;
+
+}
+
+void* (*original_malloc_ptr)(size_t) = 0;
+void (*original_free_ptr)(void*) = 0;
+static void* (*original_calloc_ptr)(size_t,size_t) = 0;
+static void* (*original_realloc_ptr)(void*,size_t) = 0;
+
+#endif /* MALLOC_LD_PRELOAD */
+
namespace tbb {
namespace internal {
-void DoOneTimeInitializations() {}
+void ITT_DoOneTimeInitialization() {} // required for itt_notify.cpp to work
#if DO_ITT_NOTIFY
-
/** Caller is responsible for ensuring this routine is called exactly once. */
void MallocInitializeITT() {
bool success = false;
@@ -52,9 +80,34 @@ void MallocInitializeITT() {
*ITT_HandlerTable[i].handler = NULL;
}
}
-
#endif /* DO_ITT_NOTIFY */
+void init_tbbmalloc() {
+#if MALLOC_LD_PRELOAD
+ if (malloc_proxy) {
+ const char *alloc_names[] = { "malloc", "free", "realloc", "calloc"};
+ void *orig_alloc_ptrs[4];
+
+ if (__TBB_internal_find_original_malloc(4, alloc_names, orig_alloc_ptrs)) {
+ (void *&)original_malloc_ptr = orig_alloc_ptrs[0];
+ (void *&)original_free_ptr = orig_alloc_ptrs[1];
+ (void *&)original_realloc_ptr = orig_alloc_ptrs[2];
+ (void *&)original_calloc_ptr = orig_alloc_ptrs[3];
+ MALLOC_ASSERT( original_malloc_ptr!=malloc_proxy,
+ "standard malloc not found" );
+/* It's workaround for a bug in GNU Libc 2.9 (as it shipped with Fedora 10).
+ 1st call to libc's malloc should be not from threaded code.
+ */
+ original_free_ptr(original_malloc_ptr(1024));
+ original_malloc_found = 1;
+ }
+ }
+#endif /* MALLOC_LD_PRELOAD */
+#if DO_ITT_NOTIFY
+ MallocInitializeITT();
+#endif
+}
+
} } // namespaces
#ifdef _WIN32
@@ -62,6 +115,7 @@ void MallocInitializeITT() {
BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
{
+
if (callReason==DLL_THREAD_DETACH)
{
mallocThreadShutdownNotification(NULL);
@@ -72,6 +126,85 @@ BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
}
return TRUE;
}
+
#endif //_WIN32
+#if MALLOC_LD_PRELOAD
+
+bool original_malloc_found;
+
+pthread_t recursive_malloc_call_thread;
+int recursive_malloc_call_flag;
+
+void lockRecursiveMallocFlag()
+{
+ recursive_malloc_call_thread = pthread_self();
+ recursive_malloc_call_flag = 1;
+}
+void unlockRecursiveMallocFlag()
+{
+ recursive_malloc_call_flag = 0;
+}
+static inline bool underRecursiveMallocFlag()
+{
+ return recursive_malloc_call_flag
+ && pthread_equal( recursive_malloc_call_thread, pthread_self());
+}
+
+extern "C" {
+
+void * __TBB_internal_malloc(size_t size)
+{
+ if ( underRecursiveMallocFlag() ) {
+ if ( original_malloc_found ){
+ return original_malloc_ptr(size);
+ }else{
+ return NULL;
+ }
+ }else{
+ return (void*)scalable_malloc(size);
+ }
+}
+
+void * __TBB_internal_calloc(size_t num, size_t size)
+{
+ if ( underRecursiveMallocFlag() ) {
+ if ( original_malloc_found ){
+#if __sun
+ /* There seem to be run time problems on Solaris if original_calloc_ptr is used. */
+ size_t arraySize = num * size;
+ void *result = original_malloc_ptr(arraySize);
+ if (result)
+ memset(result, 0, arraySize);
+ return result;
+#else
+ return original_calloc_ptr(num, size);
+#endif
+ }else{
+ return NULL;
+ }
+ }else{
+ return scalable_calloc(num, size);
+ }
+}
+
+int __TBB_internal_posix_memalign(void **memptr, size_t alignment, size_t size)
+{
+ MALLOC_ASSERT( !underRecursiveMallocFlag(),
+ "posix_memalign not expected to create a cyclic dependency" );
+ return scalable_posix_memalign(memptr, alignment, size);
+}
+
+void* __TBB_internal_realloc(void* ptr, size_t sz)
+{
+ return safer_scalable_realloc(ptr, sz, original_realloc_ptr);
+}
+
+void __TBB_internal_free(void *object)
+{
+ safer_scalable_free(object, original_free_ptr);
+}
+
+} /* extern "C" */
+#endif /* MALLOC_LD_PRELOAD */
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
index 3d9e99f..0bce7f2 100644
--- a/src/tbbmalloc/tbbmalloc.rc
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -1,4 +1,4 @@
-// Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+// Copyright 2005-2009 Intel Corporation. All Rights Reserved.
//
// This file is part of Threading Building Blocks.
//
@@ -61,6 +61,13 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
+// manifest integration
+#ifdef TBB_MANIFEST
+#include "winuser.h"
+2 RT_MANIFEST tbbmanifest.exe.manifest
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
//
// Version
//
@@ -88,7 +95,7 @@ BEGIN
//what is it? VALUE "InternalName", "tbbmalloc\0"
VALUE "LegalCopyright", "Copyright (C) 2006\0"
VALUE "LegalTrademarks", "\0"
-#ifndef TBB_DO_ASSERT
+#ifndef TBB_USE_DEBUG
VALUE "OriginalFilename", "tbbmalloc.dll\0"
#else
VALUE "OriginalFilename", "tbbmalloc_debug.dll\0"
diff --git a/src/tbbmalloc/win32-tbbmalloc-export.def b/src/tbbmalloc/win32-tbbmalloc-export.def
index 87f156e..3697e52 100644
--- a/src/tbbmalloc/win32-tbbmalloc-export.def
+++ b/src/tbbmalloc/win32-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
@@ -31,3 +31,7 @@ scalable_calloc
scalable_free
scalable_malloc
scalable_realloc
+scalable_posix_memalign
+scalable_aligned_malloc
+scalable_aligned_realloc
+scalable_aligned_free
diff --git a/src/tbbmalloc/win64-tbbmalloc-export.def b/src/tbbmalloc/win64-tbbmalloc-export.def
index 87f156e..3697e52 100644
--- a/src/tbbmalloc/win64-tbbmalloc-export.def
+++ b/src/tbbmalloc/win64-tbbmalloc-export.def
@@ -1,4 +1,4 @@
-; Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+; Copyright 2005-2009 Intel Corporation. All Rights Reserved.
;
; This file is part of Threading Building Blocks.
;
@@ -31,3 +31,7 @@ scalable_calloc
scalable_free
scalable_malloc
scalable_realloc
+scalable_posix_memalign
+scalable_aligned_malloc
+scalable_aligned_realloc
+scalable_aligned_free
diff --git a/src/test/harness.h b/src/test/harness.h
index dec6838..95b70b4 100644
--- a/src/test/harness.h
+++ b/src/test/harness.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -41,20 +41,20 @@
#include <cstring>
#endif
#include <new>
-#include "harness_assert.h"
-#if __linux__||__APPLE__||__FreeBSD__ || __sun
- #include <pthread.h>
-#elif _WIN32||WIN64
+#if _WIN32||_WIN64
#include <windows.h>
#include <process.h>
#else
- #error unknown OS
+ #include <pthread.h>
#endif
+#if !HARNESS_NO_ASSERT
+#include "harness_assert.h"
+
static void ReportError( int line, const char* expression, const char * message, bool is_error ) {
if ( is_error ) {
- fprintf(stderr,"Line %d, assertion %s: %s\n", line, expression, message ? message : "failed" );
+ printf("Line %d, assertion %s: %s\n", line, expression, message ? message : "failed" );
#if TBB_EXIT_ON_ASSERT
exit(1);
#else
@@ -62,8 +62,11 @@ static void ReportError( int line, const char* expression, const char * message,
#endif /* TBB_EXIT_ON_ASSERT */
}
else
- printf("WARNING: at line %d, assertion %s: %s\n", line, expression, message ? message : "failed" );
+ printf("Warning: at line %d, assertion %s: %s\n", line, expression, message ? message : "failed" );
}
+#else
+#define ASSERT(x,y) ((void)0)
+#endif /* HARNESS_NO_ASSERT */
#if !HARNESS_NO_PARSE_COMMAND_LINE
//! Controls level of commentary.
@@ -77,9 +80,6 @@ static int MinThread = 0;
//! Maximum number of threads
static int MaxThread = 2;
-//! NThread exists for backwards compatibility. Eventually it will be removed.
-#define NThread (MaxThread==MinThread?MaxThread : (ReportError(__LINE__,"NThread","thread range not supported"),-1))
-
//! Parse command line of the form "name [-v] [nthread]"
/** Sets Verbose, MinThread, and MaxThread accordingly.
The nthread argument can be a single number or a range of the form m:n.
@@ -102,131 +102,132 @@ static void ParseCommandLine( int argc, char* argv[] ) {
else if( *endptr=='\0' )
MaxThread = MinThread;
if( *endptr!='\0' ) {
- fprintf(stderr,"garbled nthread range\n");
+ printf("garbled nthread range\n");
exit(1);
}
if( MinThread<0 ) {
- fprintf(stderr,"nthread must be nonnegative\n");
+ printf("nthread must be nonnegative\n");
exit(1);
}
if( MaxThread<MinThread ) {
- fprintf(stderr,"nthread range is backwards\n");
+ printf("nthread range is backwards\n");
exit(1);
}
++i;
}
if( i!=argc ) {
- fprintf(stderr,"Usage: %s [-v] [nthread|minthread:maxthread]\n", argv[0] );
+ printf("Usage: %s [-v] [nthread|minthread:maxthread]\n", argv[0] );
exit(1);
}
}
-#endif /* HARNESS_NO_PARSE_COMMAND_LINE */\
+#endif /* HARNESS_NO_PARSE_COMMAND_LINE */
+
+//! Base class for prohibiting compiler-generated operator=
+class NoAssign {
+ //! Assignment not allowed
+ void operator=( const NoAssign& );
+public:
+#if __GNUC__
+ //! Explicitly define default construction, because otherwise gcc issues gratuitous warning.
+ NoAssign() {}
+#endif /* __GNUC__ */
+};
+
+//! Base class for prohibiting compiler-generated copy constructor or operator=
+class NoCopy: NoAssign {
+ //! Copy construction not allowed
+ NoCopy( const NoCopy& );
+public:
+ NoCopy() {}
+};
//! For internal use by template function NativeParallelFor
-template<typename Range, typename Body>
-class NativeParalleForTask {
+template<typename Index, typename Body>
+class NativeParallelForTask: NoCopy {
public:
- NativeParalleForTask( const Range& range_, const Body& body_ ) :
- range(range_),
+ NativeParallelForTask( Index index_, const Body& body_ ) :
+ index(index_),
body(body_)
{}
//! Start task
void start() {
-#if __linux__||__APPLE__||__FreeBSD__ || __sun
- int status = pthread_create(&thread_id, NULL, thread_function, this);
- ASSERT(0==status, "NativeParallelFor: pthread_create failed");
-#else
+#if _WIN32||_WIN64
unsigned thread_id;
thread_handle = (HANDLE)_beginthreadex( NULL, 0, thread_function, this, 0, &thread_id );
ASSERT( thread_handle!=0, "NativeParallelFor: _beginthreadex failed" );
+#else
+#if __ICC==1100
+ #pragma warning (push)
+ #pragma warning (disable: 2193)
+#endif /* __ICC==1100 */
+ int status = pthread_create(&thread_id, NULL, thread_function, this);
+ ASSERT(0==status, "NativeParallelFor: pthread_create failed");
+#if __ICC==1100
+ #pragma warning (pop)
#endif
+#endif /* _WIN32||_WIN64 */
}
//! Wait for task to finish
void wait_to_finish() {
-#if __linux__||__APPLE__||__FreeBSD__ || __sun
- int status = pthread_join( thread_id, NULL );
- ASSERT( !status, "pthread_join failed" );
-#else
+#if _WIN32||_WIN64
DWORD status = WaitForSingleObject( thread_handle, INFINITE );
ASSERT( status!=WAIT_FAILED, "WaitForSingleObject failed" );
CloseHandle( thread_handle );
+#else
+ int status = pthread_join( thread_id, NULL );
+ ASSERT( !status, "pthread_join failed" );
#endif
}
- //! Build (or precompute size of) array of tasks.
- /** Computes number of of tasks required, plus index.
- If array!=NULL, also constructs the necessary tasks, starting at array[index].
- Top-level caller should let index default to 0. */
- static size_t build_task_array( const Range& range, const Body& body, NativeParalleForTask* array, size_t index );
private:
-#if __linux__||__APPLE__||__FreeBSD__ || __sun
- pthread_t thread_id;
-#else
+#if _WIN32||_WIN64
HANDLE thread_handle;
+#else
+ pthread_t thread_id;
#endif
//! Range over which task will invoke the body.
- const Range range;
+ const Index index;
//! Body to invoke over the range.
const Body body;
-#if __linux__||__APPLE__||__FreeBSD__ || __sun
- static void* thread_function(void* object)
-#else
+#if _WIN32||_WIN64
static unsigned __stdcall thread_function( void* object )
+#else
+ static void* thread_function(void* object)
#endif
{
- NativeParalleForTask& self = *static_cast<NativeParalleForTask*>(object);
- (self.body)(self.range);
+ NativeParallelForTask& self = *static_cast<NativeParallelForTask*>(object);
+ (self.body)(self.index);
return 0;
}
};
-#include "tbb/tbb_stddef.h"
-
-template<typename Range,typename Body>
-size_t NativeParalleForTask<Range,Body>::build_task_array( const Range& range, const Body& body, NativeParalleForTask* array, size_t index ) {
- if( !range.is_divisible() ) {
- if( array ) {
- new( &array[index] ) NativeParalleForTask(range,body);
- }
- return index+1;
- } else {
- Range r1 = range;
- Range r2(r1,tbb::split());
- return build_task_array( r2, body, array, build_task_array(r1,body,array,index) );
- }
-}
-
-//! NativeParallelFor is like a TBB parallel_for.h, but with each invocation of Body in a separate thread.
-/** By using a blocked_range with a grainsize of 1, you can guarantee
- that each iteration is performed by a separate thread */
-template <typename Range, typename Body>
-void NativeParallelFor(const Range& range, const Body& body) {
- typedef NativeParalleForTask<Range,Body> task;
-
- if( !range.empty() ) {
- // Compute how many tasks are needed
- size_t n = task::build_task_array(range,body,NULL,0);
+//! Execute body(i) in parallel for i in the interval [0,n).
+/** Each iteartion is performed by a separate thread. */
+template<typename Index, typename Body>
+void NativeParallelFor( Index n, const Body& body ) {
+ typedef NativeParallelForTask<Index,Body> task;
+ if( n>0 ) {
// Allocate array to hold the tasks
task* array = static_cast<task*>(operator new( n*sizeof(task) ));
// Construct the tasks
- size_t m = task::build_task_array(range,body,array,0);
- ASSERT( m==n, "range splitting not deterministic" );
+ for( Index i=0; i!=n; ++i )
+ new( &array[i] ) task(i,body);
// Start the tasks
- for( size_t j=0; j<n; ++j )
- array[j].start();
+ for( Index i=0; i!=n; ++i )
+ array[i].start();
- // Wait for the tasks
- for( size_t j=n; j>0; --j ) {
- array[j-1].wait_to_finish();
- array[j-1].~task();
+ // Wait for the tasks to finish and destroy each one.
+ for( Index i=n; i; --i ) {
+ array[i-1].wait_to_finish();
+ array[i-1].~task();
}
// Deallocate the task array
@@ -243,7 +244,7 @@ void zero_fill(void* array, size_t N) {
#ifndef min
//! Utility template function returning lesser of the two values.
/** Provided here to avoid including not strict safe <algorithm>.\n
- In case operands cause sined/unsigned or size mismatch warnings it is caller's
+ In case operands cause signed/unsigned or size mismatch warnings it is caller's
responsibility to do the appropriate cast before calling the function. **/
template<typename T1, typename T2>
const T1& min ( const T1& val1, const T2& val2 ) {
@@ -254,7 +255,7 @@ void zero_fill(void* array, size_t N) {
#ifndef max
//! Utility template function returning greater of the two values. Provided here to avoid including not strict safe <algorithm>.
/** Provided here to avoid including not strict safe <algorithm>.\n
- In case operands cause sined/unsigned or size mismatch warnings it is caller's
+ In case operands cause signed/unsigned or size mismatch warnings it is caller's
responsibility to do the appropriate cast before calling the function. **/
template<typename T1, typename T2>
const T1& max ( const T1& val1, const T2& val2 ) {
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
index 6fe5826..92302d9 100644
--- a/src/test/harness_allocator.h
+++ b/src/test/harness_allocator.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -50,7 +50,7 @@ using std::printf;
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (push)
#pragma warning (disable: 4267)
-#endif /* _MSC_VER && _Wp64 */
+#endif
template <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >
@@ -225,4 +225,4 @@ public:
#if defined(_MSC_VER) && defined(_Wp64)
// Workaround for overzealous compiler warnings in /Wp64 mode
#pragma warning (pop)
-#endif /* _MSC_VER && _Wp64 */
+#endif // warning 4267 is back
diff --git a/src/test/harness_assert.h b/src/test/harness_assert.h
index 91284bf..1605330 100644
--- a/src/test/harness_assert.h
+++ b/src/test/harness_assert.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/harness_bad_expr.h b/src/test/harness_bad_expr.h
index faae910..ba9353e 100644
--- a/src/test/harness_bad_expr.h
+++ b/src/test/harness_bad_expr.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -45,8 +45,9 @@
CheckAssertionFailure(__LINE__,#x,okay,message,substr); \
}
+//! Exception object that holds a message.
struct AssertionFailure {
- const char* const message;
+ const char* message;
AssertionFailure( const char* filename, int line, const char* expression, const char* comment );
};
@@ -56,7 +57,7 @@ AssertionFailure::AssertionFailure( const char* filename, int line, const char*
ASSERT(filename,"missing filename");
ASSERT(0<line,"line number must be positive");
// All of our current files have fewer than 4000 lines.
- ASSERT(line<4000,"dubiously high line number");
+ ASSERT(line<5000,"dubiously high line number");
ASSERT(expression,"missing expression");
}
@@ -66,13 +67,13 @@ void AssertionFailureHandler( const char* filename, int line, const char* expres
void CheckAssertionFailure( int line, const char* expression, bool okay, const char* message, const char* substr ) {
if( !okay ) {
- fprintf(stderr,"Line %d, %s failed to fail\n", line, expression );
+ printf("Line %d, %s failed to fail\n", line, expression );
abort();
} else if( !message ) {
- fprintf(stderr,"Line %d, %s failed without a message\n", line, expression );
+ printf("Line %d, %s failed without a message\n", line, expression );
abort();
} else if( strstr(message,substr)==0 ) {
- fprintf(stderr,"Line %d, %s failed with message '%s' missing substring '%s'\n", __LINE__, expression, message, substr );
+ printf("Line %d, %s failed with message '%s' missing substring '%s'\n", __LINE__, expression, message, substr );
abort();
}
}
diff --git a/src/test/harness_cpu.h b/src/test/harness_cpu.h
index 9c6c87d..3ccc836 100644
--- a/src/test/harness_cpu.h
+++ b/src/test/harness_cpu.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -66,7 +66,6 @@ static double GetCPUUserTime() {
}
#include "tbb/tick_count.h"
-#include "tbb/tbb_machine.h"
#include <cstdio>
// The resolution of GetCPUUserTime is 10-15 ms or so; waittime should be a few times bigger.
@@ -101,8 +100,8 @@ static void TestCPUUserTime( int nthreads, int nactive = 1 ) {
double avg_worker_usrtime = (usrtime-nactive*waittime)/nworkers;
if( avg_worker_usrtime > waittime/2 )
- fprintf(stderr, "ERROR: %d worker threads are spinning; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
- nworkers, waittime, usrtime, avg_worker_usrtime);
+ printf( "ERROR: %d worker threads are spinning; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
+ nworkers, waittime, usrtime, avg_worker_usrtime);
else if( Verbose )
printf("%d worker threads; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
nworkers, waittime, usrtime, avg_worker_usrtime);
diff --git a/src/test/harness_m128.h b/src/test/harness_m128.h
index 7bcadc4..e23ce53 100644
--- a/src/test/harness_m128.h
+++ b/src/test/harness_m128.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/harness_memory.h b/src/test/harness_memory.h
index c7513c0..7cfc23f 100644
--- a/src/test/harness_memory.h
+++ b/src/test/harness_memory.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -59,7 +59,11 @@ static size_t GetMemoryUsage() {
size_t pagesize = getpagesize();
ASSERT(statsfile, NULL);
long total_mem;
- fscanf(statsfile,"%lu",&total_mem);
+ int n = fscanf(statsfile,"%lu",&total_mem);
+ if( n!=1 ) {
+ printf("Warning: memory usage statistics wasn't obtained\n");
+ return 0;
+ }
fclose(statsfile);
return total_mem*pagesize;
#elif __APPLE__
diff --git a/src/test/harness_trace.h b/src/test/harness_trace.h
index dde5390..95a6af9 100644
--- a/src/test/harness_trace.h
+++ b/src/test/harness_trace.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -100,7 +100,7 @@ namespace harness_internal {
msg[len] = '\n';
msg[len + 1] = 0;
}
- printf (msg);
+ printf ("%s",msg);
#if _WIN32 || _WIN64
OutputDebugStringA(msg);
#endif
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
index ff6c10e..1b0ef51 100644
--- a/src/test/test_ScalableAllocator.cpp
+++ b/src/test/test_ScalableAllocator.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
index b2e0487..08c8c34 100644
--- a/src/test/test_ScalableAllocator_STL.cpp
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
index dbbfad7..647a083 100644
--- a/src/test/test_aligned_space.cpp
+++ b/src/test/test_aligned_space.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_allocator.h b/src/test/test_allocator.h
index 9942256..90f7db4 100644
--- a/src/test/test_allocator.h
+++ b/src/test/test_allocator.h
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -145,7 +145,7 @@ void TestBasic( A& a ) {
// A is an allocator for some type
template<typename A>
-struct Body {
+struct Body: NoAssign {
static const size_t max_k = 100000;
A &a;
Body(A &a_) : a(a_) {}
@@ -170,11 +170,8 @@ struct Body {
array[i] = 0;
}
- void operator()( const tbb::blocked_range<size_t>& r ) const {
- ASSERT( r.begin()+1==r.end(), NULL );
-
+ void operator()( size_t thread_id ) const {
typename A::pointer array[256];
- size_t thread_id = r.begin();
for( size_t k=0; k<256; ++k )
array[k] = 0;
@@ -200,7 +197,7 @@ void Test() {
// thread safety
int n = NumberOfFoo;
- NativeParallelFor( tbb::blocked_range<size_t>(0,4,1), Body<A>(a) );
+ NativeParallelFor( 4, Body<A>(a) );
ASSERT( NumberOfFoo==n, "Allocate/deallocate count mismatched" );
ASSERT( a==b, NULL );
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
index 0fe2130..db7e6e3 100644
--- a/src/test/test_assembly.cpp
+++ b/src/test/test_assembly.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
index bc01dbb..f511e4d 100644
--- a/src/test/test_atomic.cpp
+++ b/src/test/test_atomic.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -32,6 +32,12 @@
#include "tbb/atomic.h"
#include "harness_assert.h"
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // unary minus operator applied to unsigned type, result still unsigned
+ #pragma warning( push )
+ #pragma warning( disable: 4310 )
+#endif
+
//! Structure that holds an atomic<T> and some guard bytes around it.
template<typename T>
struct TestStruct {
@@ -49,6 +55,10 @@ struct TestStruct {
}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif
+
//! Test compare_and_swap template members of class atomic<T> for memory_semantics=M
template<typename T,tbb::memory_semantics M>
void TestCompareAndSwapAcquireRelease( T i, T j, T k ) {
@@ -107,6 +117,13 @@ void TestFetchAndStore( T i, T j ) {
TestFetchAndStoreAcquireRelease<T,tbb::release>(i,j);
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // conversion from <bigger integer> to <smaller integer>, possible loss of data
+ // the warning seems a complete nonsense when issued for e.g. short+=short
+ #pragma warning( push )
+ #pragma warning( disable: 4244 )
+#endif
+
//! Test fetch_and_add members of class atomic<T> for memory_semantics=M
template<typename T,tbb::memory_semantics M>
void TestFetchAndAddAcquireRelease( T i ) {
@@ -180,6 +197,16 @@ void TestFetchAndAdd( T i ) {
TestFetchAndAddAcquireRelease<T,tbb::release>(i);
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif // warning 4244 is back
+
+//! A type with unknown size.
+class IncompleteType;
+
+void TestFetchAndAdd( IncompleteType* ) {
+ // There are no fetch-and-add operations on a IncompleteType*.
+}
void TestFetchAndAdd( void* ) {
// There are no fetch-and-add operations on a void*.
}
@@ -218,10 +245,10 @@ struct AlignmentChecker {
#include "harness.h"
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( push )
-// unary minus operator applied to unsigned type, result still unsigned
-#pragma warning( disable: 4146 )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ // unary minus operator applied to unsigned type, result still unsigned
+ #pragma warning( push )
+ #pragma warning( disable: 4146 )
+#endif
/** T is an integral type. */
template<typename T>
@@ -245,9 +272,10 @@ void TestAtomicInteger( const char* name ) {
}
TestParallel<T>( name );
}
+
#if _MSC_VER && !defined(__INTEL_COMPILER)
-#pragma warning( pop )
-#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+ #pragma warning( pop )
+#endif
template<typename T>
@@ -263,7 +291,7 @@ void TestIndirection() {
pointer = &item;
for( int k=-10; k<=10; ++k ) {
// Test various syntaxes for indirection to fields with non-zero offset.
- T value1, value2;
+ T value1=T(), value2=T();
for( size_t j=0; j<sizeof(T); ++j ) {
*(char*)&value1 = char(k^j);
*(char*)&value2 = char(k^j*j);
@@ -277,29 +305,144 @@ void TestIndirection() {
}
}
+//! Test atomic<T*>
template<typename T>
void TestAtomicPointer() {
+ if( Verbose )
+ printf("testing atomic pointer (%d)\n",int(sizeof(T)));
T array[1000];
TestOperations<T*>(&array[500],&array[250],&array[750]);
- TestOperations<void*>(&array[500],&array[250],&array[750]);
TestIndirection<T>();
TestParallel<T*>( "pointer" );
}
-// Specialization for void*
-template<>
-void TestAtomicPointer<void*>() {
- void* array[1000];
- TestOperations<void*>(&array[500],&array[250],&array[750]);
- TestParallel<void*>( "pointer" );
+//! Test atomic<Ptr> where Ptr is a pointer to a type of unknown size
+template<typename Ptr>
+void TestAtomicPointerToTypeOfUnknownSize( const char* name ) {
+ if( Verbose )
+ printf("testing atomic<%s>\n",name);
+ char array[1000];
+ TestOperations<Ptr>((Ptr)(void*)&array[500],(Ptr)(void*)&array[250],(Ptr)(void*)&array[750]);
+ TestParallel<Ptr>( name );
}
void TestAtomicBool() {
+ if( Verbose )
+ printf("testing atomic<bool>\n");
TestOperations<bool>(true,true,false);
TestOperations<bool>(false,false,true);
TestParallel<bool>( "bool" );
}
+const int numMaskedOperations = 100000;
+const int testSpaceSize = 8;
+int prime[testSpaceSize] = {3,5,7,11,13,17,19,23};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // "possible loss of data" warning suppressed again
+ #pragma warning( push )
+ #pragma warning( disable: 4244 )
+#endif
+
+template<typename T>
+class TestMaskedCAS_Body: NoAssign {
+ T* test_space_uncontended;
+ T* test_space_contended;
+public:
+ TestMaskedCAS_Body( T* _space1, T* _space2 ) : test_space_uncontended(_space1), test_space_contended(_space2) {}
+ void operator()( int my_idx ) const {
+ using tbb::internal::__TBB_MaskedCompareAndSwap;
+ const T my_prime = T(prime[my_idx]);
+ T* const my_ptr = test_space_uncontended+my_idx;
+ T old_value=0;
+ for( int i=0; i<numMaskedOperations; ++i, old_value+=my_prime ){
+ T result;
+ // Test uncontended case
+ T new_value = old_value + my_prime;
+ // The following CAS should always fail
+ result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value-1);
+ ASSERT(result!=old_value-1, "masked CAS succeeded while it should fail");
+ ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+ // The following one should succeed
+ result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
+ ASSERT(result==old_value && *my_ptr==new_value, "masked CAS failed while it should succeed");
+ // The following one should fail again
+ result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(my_ptr,new_value,old_value);
+ ASSERT(result!=old_value, "masked CAS succeeded while it should fail");
+ ASSERT(result==*my_ptr, "masked CAS result mismatch with real value");
+ // Test contended case
+ for( int j=0; j<testSpaceSize; ++j ){
+ // try adding my_prime until success
+ T value;
+ do {
+ value = test_space_contended[j];
+ result = __TBB_MaskedCompareAndSwap<sizeof(T),T>(test_space_contended+j,value+my_prime,value);
+ } while( result!=value );
+ }
+ }
+ }
+};
+
+template<typename T>
+struct intptr_as_array_of
+{
+ static const int how_many_Ts = sizeof(intptr_t)/sizeof(T);
+ union {
+ intptr_t result;
+ T space[ how_many_Ts ];
+ };
+};
+
+template<typename T>
+intptr_t getCorrectUncontendedValue(int slot_idx) {
+ intptr_as_array_of<T> slot;
+ slot.result = 0;
+ for( int i=0; i<slot.how_many_Ts; ++i ) {
+ const T my_prime = T(prime[slot_idx*slot.how_many_Ts + i]);
+ for( int j=0; j<numMaskedOperations; ++j )
+ slot.space[i] += my_prime;
+ }
+ return slot.result;
+}
+
+template<typename T>
+intptr_t getCorrectContendedValue() {
+ intptr_as_array_of<T> slot;
+ slot.result = 0;
+ for( int i=0; i<slot.how_many_Ts; ++i )
+ for( int primes=0; primes<testSpaceSize; ++primes )
+ for( int j=0; j<numMaskedOperations; ++j )
+ slot.space[i] += prime[primes];
+ return slot.result;
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif // warning 4244 is back again
+
+template<typename T>
+void TestMaskedCAS() {
+ if( Verbose )
+ printf("testing masked CAS<%d>\n",int(sizeof(T)));
+
+ const int num_slots = sizeof(T)*testSpaceSize/sizeof(intptr_t);
+ intptr_t arr1[num_slots+2]; // two more "canary" slots at boundaries
+ intptr_t arr2[num_slots+2];
+ for(int i=0; i<num_slots+2; ++i)
+ arr2[i] = arr1[i] = 0;
+ T* test_space_uncontended = (T*)(arr1+1);
+ T* test_space_contended = (T*)(arr2+1);
+
+ NativeParallelFor( testSpaceSize, TestMaskedCAS_Body<T>(test_space_uncontended, test_space_contended) );
+
+ ASSERT( arr1[0]==0 && arr1[num_slots+1]==0 && arr2[0]==0 && arr2[num_slots+1]==0 , "adjacent memory was overwritten" );
+ const intptr_t correctContendedValue = getCorrectContendedValue<T>();
+ for(int i=0; i<num_slots; ++i) {
+ ASSERT( arr1[i+1]==getCorrectUncontendedValue<T>(i), "unexpected value in an uncontended slot" );
+ ASSERT( arr2[i+1]==correctContendedValue, "unexpected value in a contended slot" );
+ }
+}
+
template<unsigned N>
class ArrayElement {
char item[N];
@@ -333,18 +476,16 @@ int main( int argc, char* argv[] ) {
TestAtomicPointer<ArrayElement<6> >();
TestAtomicPointer<ArrayElement<7> >();
TestAtomicPointer<ArrayElement<8> >();
- TestAtomicPointer<void*>();
+ TestAtomicPointerToTypeOfUnknownSize<IncompleteType*>( "IncompleteType*" );
+ TestAtomicPointerToTypeOfUnknownSize<void*>( "void*" );
TestAtomicBool();
ASSERT( !ParallelError, NULL );
+ TestMaskedCAS<unsigned char>();
+ TestMaskedCAS<unsigned short>();
printf("done\n");
return 0;
}
-// Portions dependent on blocked_range.h are down here, so that preceding tests do not
-// accidentally depend upon it.
-
-#include "tbb/blocked_range.h"
-
template<typename T>
struct FlagAndMessage {
//! 0 if message not set yet, 1 if message is set.
@@ -362,6 +503,13 @@ T special_sum(intptr_t arg1, intptr_t arg2) {
return (T)((T)arg1 + arg2);
}
+// The specialization for IncompleteType* is required
+// because pointer arithmetic (+) is impossible with IncompleteType*
+template<>
+IncompleteType* special_sum<IncompleteType*>(intptr_t arg1, intptr_t arg2) {
+ return (IncompleteType*)(arg1 + arg2);
+}
+
// The specialization for void* is required
// because pointer arithmetic (+) is impossible with void*
template<>
@@ -379,7 +527,7 @@ bool special_sum<bool>(intptr_t arg1, intptr_t arg2) {
volatile int One = 1;
template<typename T>
-class HammerLoadAndStoreFence {
+class HammerLoadAndStoreFence: NoAssign {
FlagAndMessage<T>* fam;
const int n;
const int p;
@@ -388,9 +536,8 @@ class HammerLoadAndStoreFence {
mutable T accum;
public:
HammerLoadAndStoreFence( FlagAndMessage<T>* fam_, int n_, int p_, const char* name_, int trial_ ) : fam(fam_), n(n_), p(p_), trial(trial_), name(name_) {}
- void operator()( const tbb::blocked_range<int>& range ) const {
+ void operator()( int k ) const {
int one = One;
- int k = range.begin();
FlagAndMessage<T>* s = fam+k;
FlagAndMessage<T>* s_next = fam + (k+1)%p;
for( int i=0; i<n; ++i ) {
@@ -455,7 +602,7 @@ void TestLoadAndStoreFences( const char* name ) {
memset( fam, 0, p*sizeof(FlagAndMessage<T>) );
fam->message = (T)-1;
fam->flag = (T)-1;
- NativeParallelFor( tbb::blocked_range<int>(0,p,1), HammerLoadAndStoreFence<T>( fam, 100, p, name, trial ) );
+ NativeParallelFor( p, HammerLoadAndStoreFence<T>( fam, 100, p, name, trial ) );
for( int k=0; k<p; ++k ) {
ASSERT( fam[k].message==(k==0 ? (T)-1 : 0), "incomplete round-robin?" );
ASSERT( fam[k].flag==(k==0 ? (T)-1 : 0), "incomplete round-robin?" );
@@ -484,7 +631,7 @@ public:
//! Get ith member of set
T get( int i ) const {
// Create multiple of factor. The & prevents overflow of the product.
- return (i&0x7F)*factor;
+ return T((i&0x7F)*factor);
}
//! True if set contains x
bool contains( T x ) const {
@@ -513,15 +660,15 @@ public:
};
template<typename T>
-class HammerAssignment {
+class HammerAssignment: NoAssign {
tbb::atomic<T>& x;
const char* name;
SparseValueSet<T> set;
public:
HammerAssignment( tbb::atomic<T>& x_, const char* name_ ) : x(x_), name(name_) {}
- void operator()( const tbb::blocked_range<int>& range ) const {
+ void operator()( int k ) const {
const int n = 1000000;
- if( range.begin() ) {
+ if( k ) {
tbb::atomic<T> z;
AssertSameType( z=x, z ); // Check that return type from assignment is correct
for( int i=0; i<n; ++i ) {
@@ -545,11 +692,22 @@ public:
}
};
+// Compile-time check that a class method has the required signature.
+// Intended to check the assignment operator of tbb::atomic.
+template<typename T> void TestAssignmentSignature( T& (T::*)(const T&) ) {}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress "conditional expression is constant" warning.
+ #pragma warning( push )
+ #pragma warning( disable: 4127 )
+#endif
+
template<typename T>
void TestAssignment( const char* name ) {
+ TestAssignmentSignature( &tbb::atomic<T>::operator= );
tbb::atomic<T> x;
x = 0;
- NativeParallelFor( tbb::blocked_range<int>(0,2,1), HammerAssignment<T>( x, name ) );
+ NativeParallelFor( 2, HammerAssignment<T>( x, name ) );
#if __TBB_x86_32 && (__linux__ || __FreeBSD__ || _WIN32)
if( sizeof(T)==8 ) {
// Some compilers for IA-32 fail to provide 8-byte alignment of objects on the stack,
@@ -566,14 +724,18 @@ void TestAssignment( const char* name ) {
// y crosses 8-byte boundary if and only if x does not cross.
tbb::atomic<T>& y = *reinterpret_cast<tbb::atomic<T>*>((reinterpret_cast<uintptr_t>(&raw_space[7+delta])&~7u) - delta);
// Assertion checks that y really did end up somewhere inside "raw_space".
- __TBB_ASSERT( raw_space<=reinterpret_cast<char*>(&y), "y starts before raw_space" );
- __TBB_ASSERT( reinterpret_cast<char*>(&y+1) <= raw_space+sizeof(raw_space), "y starts after raw_space" );
+ ASSERT( raw_space<=reinterpret_cast<char*>(&y), "y starts before raw_space" );
+ ASSERT( reinterpret_cast<char*>(&y+1) <= raw_space+sizeof(raw_space), "y starts after raw_space" );
y = 0;
- NativeParallelFor( tbb::blocked_range<int>(0,2,1), HammerAssignment<T>( y, name ) );
+ NativeParallelFor( 2, HammerAssignment<T>( y, name ) );
}
#endif /* __TBB_x86_32 && (__linux__ || __FreeBSD__ || _WIN32) */
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif
+
template<typename T>
void TestParallel( const char* name ) {
TestLoadAndStoreFences<T>(name);
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
index 40ee335..ececef5 100644
--- a/src/test/test_blocked_range.cpp
+++ b/src/test/test_blocked_range.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_blocked_range2d.cpp b/src/test/test_blocked_range2d.cpp
index 2caa851..7fce101 100644
--- a/src/test/test_blocked_range2d.cpp
+++ b/src/test/test_blocked_range2d.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_blocked_range3d.cpp b/src/test/test_blocked_range3d.cpp
index 14b70d3..36ede8d 100644
--- a/src/test/test_blocked_range3d.cpp
+++ b/src/test/test_blocked_range3d.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
index 3fdcc7d..b5930a2 100644
--- a/src/test/test_cache_aligned_allocator.cpp
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
index d3136a1..b806ed2 100644
--- a/src/test/test_cache_aligned_allocator_STL.cpp
+++ b/src/test/test_cache_aligned_allocator_STL.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_compiler.cpp b/src/test/test_compiler.cpp
index 0fe30f2..a6b6583 100644
--- a/src/test/test_compiler.cpp
+++ b/src/test/test_compiler.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -33,8 +33,6 @@ union char2bool {
volatile bool b;
} u;
-#include "harness.h"
-
// The function proves the compiler uses 0 or 1 to store a bool. It
// inspects what a compiler does when it loads a bool. A compiler that
// uses a value other than 0 or 1 to represent a bool will have to normalize
@@ -46,18 +44,16 @@ int test_bool_representation() {
u.c = (unsigned char)i;
unsigned char x = (unsigned char)u.b;
if( x != i ) {
- if( Verbose )
- fprintf(stderr, "Test failed at %d iteration\n",i);
+ printf("Test failed at iteration i=%d\n",i);
return 1;
}
}
return 0;
}
-int main( int argc, char* argv[] ) {
- ParseCommandLine(argc, argv);
+int main() {
if( test_bool_representation()!=0 )
- fprintf(stderr, "ERROR: bool representation test failed\n");
+ printf("ERROR: bool representation test failed\n");
else
printf("done\n");
return 0;
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
index 9dc3dc6..c6097e6 100644
--- a/src/test/test_concurrent_hash_map.cpp
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,10 +26,39 @@
the GNU General Public License.
*/
-#ifndef TBB_PERFORMANCE_WARNINGS
-#define TBB_PERFORMANCE_WARNINGS 1
+#ifndef TBB_USE_PERFORMANCE_WARNINGS
+#define TBB_USE_PERFORMANCE_WARNINGS 1
#endif
-#include "tbb/tbb_stddef.h"
+
+// Our tests usually include the header under test first. But this test needs
+// to use the preprocessor to edit the identifier runtime_warning in concurrent_hash_map.h.
+// Hence we include a few other headers before doing the abusive edit.
+#include "tbb/tbb_stddef.h" /* Defines runtime_warning */
+#include "harness_assert.h" /* Prerequisite for defining hooked_warning */
+
+// The symbol internal::runtime_warning is normally an entry point into the TBB library.
+// Here for sake of testing, we define it to be hooked_warning, a routine peculiar to this unit test.
+#define runtime_warning hooked_warning
+
+static bool bad_hashing = false;
+
+namespace tbb {
+ namespace internal {
+ static void hooked_warning( const char* /*format*/, ... ) {
+ ASSERT(bad_hashing, "unexpected bad hashing");
+ }
+ } // namespace internal
+} // namespace tbb
+
+#include "tbb/concurrent_hash_map.h"
+
+// Restore runtime_warning as an entry point into the TBB library.
+#undef runtime_warning
+
+// Test whether a sufficient set of headers were included to instantiate a concurernt_hash_map. OSS Bug #120 (& #130):
+// http://www.threadingbuildingblocks.org/bug_desc.php?id=120
+tbb::concurrent_hash_map<std::pair<std::pair<int,std::string>,const char*>,int> TestInstantiation;
+
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
#include "tbb/atomic.h"
@@ -37,17 +66,6 @@
#include "harness.h"
#include "harness_allocator.h"
-// hook performance warning
-#define runtime_warning hooked_warning
-bool bad_hashing = false;
-namespace tbb { namespace internal {
- void hooked_warning( const char* format, ... ) {
- ASSERT(bad_hashing, NULL);
- }
-}}// namespace tbb::internal
-
-#include "tbb/concurrent_hash_map.h"
-
class MyException : public std::bad_alloc {
public:
virtual const char *what() const throw() { return "out of items limit"; }
@@ -163,7 +181,7 @@ public:
bool equal( const MyKey& j, const MyKey& k ) const {
return j.key==k.key;
}
- unsigned long hash( const MyKey& k ) const {
+ unsigned long hash( const MyKey& ) const {
return 1;
}
};
@@ -314,7 +332,7 @@ struct InnerInsert {
};
template<typename Op, typename MyTable>
-class TableOperation {
+class TableOperation: NoAssign {
MyTable& my_table;
public:
void operator()( const tbb::blocked_range<int>& range ) const {
@@ -378,7 +396,7 @@ void TraverseTable( MyTable& table, size_t n, size_t expected_size ) {
typedef tbb::atomic<unsigned char> AtomicByte;
template<typename RangeType>
-struct ParallelTraverseBody {
+struct ParallelTraverseBody: NoAssign {
const size_t n;
AtomicByte* const array;
ParallelTraverseBody( AtomicByte array_[], size_t n_ ) :
@@ -480,13 +498,13 @@ void TestInsertFindErase( int nthread ) {
volatile int Counter;
-class AddToTable {
+class AddToTable: NoAssign {
MyTable& my_table;
const int my_nthread;
const int my_m;
public:
AddToTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}
- void operator()( const tbb::blocked_range<int>& r ) const {
+ void operator()( int ) const {
for( int i=0; i<my_m; ++i ) {
// Busy wait to synchronize threads
int j = 0;
@@ -502,7 +520,7 @@ public:
// Now all threads attempt to simultaneously insert a key.
int k;
{
- MyTable::accessor a, b;
+ MyTable::accessor a;
MyKey key = MyKey::make(i);
if( my_table.insert( a, key ) )
a->second.set_value( 1 );
@@ -516,13 +534,13 @@ public:
}
};
-class RemoveFromTable {
+class RemoveFromTable: NoAssign {
MyTable& my_table;
const int my_nthread;
const int my_m;
public:
RemoveFromTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}
- void operator()( const tbb::blocked_range<int>& r ) const {
+ void operator()(int) const {
for( int i=0; i<my_m; ++i ) {
bool b;
if(i&4) {
@@ -550,7 +568,7 @@ void TestConcurrency( int nthread ) {
const int m = 1000;
Counter = 0;
tbb::tick_count t0 = tbb::tick_count::now();
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), AddToTable(table,nthread,m) );
+ NativeParallelFor( nthread, AddToTable(table,nthread,m) );
tbb::tick_count t1 = tbb::tick_count::now();
if( Verbose )
printf("time for %u insertions = %g with %d threads\n",unsigned(MyDataCount),(t1-t0).seconds(),nthread);
@@ -558,7 +576,7 @@ void TestConcurrency( int nthread ) {
EraseCount = 0;
t0 = tbb::tick_count::now();
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), RemoveFromTable(table,nthread,m) );
+ NativeParallelFor( nthread, RemoveFromTable(table,nthread,m) );
t1 = tbb::tick_count::now();
if( Verbose )
printf("time for %u deletions = %g with %d threads\n",unsigned(EraseCount),(t1-t0).seconds(),nthread);
@@ -856,7 +874,6 @@ int main( int argc, char* argv[] ) {
TestConcurrency( nthread );
}
// check linking
- #undef runtime_warning
if(bad_hashing) { //should be false
tbb::internal::runtime_warning("none\nERROR: it must not be executed");
}
diff --git a/src/test/test_concurrent_hash_map_string.cpp b/src/test/test_concurrent_hash_map_string.cpp
deleted file mode 100644
index 18348ca..0000000
--- a/src/test/test_concurrent_hash_map_string.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
-
- This file is part of Threading Building Blocks.
-
- Threading Building Blocks is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public License
- version 2 as published by the Free Software Foundation.
-
- Threading Building Blocks is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied warranty
- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Threading Building Blocks; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- As a special exception, you may use this file as part of a free software
- library without restriction. Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License. This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-*/
-
-// Test for problem where Microsoft VC8 compiler could not compile
-// concurrent_hash_map that uses a FastString, as defined below.
-// The root problem was a missing "const" in the copy constructor for scalable_allocator.
-// Unfortunately, I (Arch Robison) was not able to reduce the test to
-// something that did not involve concurrent_hash_map, so this test
-// is regrettably large. The problem did not manifest itself when
-// the Intel or GNU compilers were used.
-
-#include "tbb/concurrent_hash_map.h"
-#include "tbb/scalable_allocator.h"
-#include "harness_assert.h"
-#include <string>
-
-typedef std::basic_string<char,std::char_traits<char>,tbb::scalable_allocator<char> > FastString;
-
-struct FastStringHashCompare {
- static size_t hash( const FastString& x ) {
- size_t h = 0;
- for( const char* s = x.c_str(); *s; s++ )
- h = (h*17)^*s;
- return h;
- }
- //! True if FastStrings are equal
- static bool equal( const FastString& x, const FastString& y ) {
- return x==y;
- }
-};
-
-void TestStringKey() {
- typedef tbb::concurrent_hash_map<FastString,int,FastStringHashCompare> table_type;
- table_type table;
- static const FastString fruit[] = {"apple", "banana", "cherry"};
- for( int i=0; i<12; ++i ) {
- table_type::accessor a;
- table.insert( a, fruit[i%3] );
- a->second += 1;
- }
- table_type::iterator j=table.begin();
- for( int i=0; i<3; ++i, ++j ) {
- ASSERT( j->second==4, NULL );
- }
- ASSERT( j==table.end(), NULL );
-
-}
-
-#include "harness.h"
-
-//! Test driver
-int main( int argc, char* argv[] ) {
-
- // Do test with string
- TestStringKey();
-
- printf("done\n");
- return 0;
-}
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
index 5425f66..2fb713d 100644
--- a/src/test/test_concurrent_queue.cpp
+++ b/src/test/test_concurrent_queue.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,7 +29,6 @@
#include "tbb/concurrent_queue.h"
#include "tbb/atomic.h"
#include "tbb/tick_count.h"
-#include "tbb/blocked_range.h"
#include "harness.h"
#include "harness_allocator.h"
@@ -133,20 +132,17 @@ static tbb::atomic<long> PopKind[3];
const int M = 10000;
-struct Body {
+struct Body: NoAssign {
tbb::concurrent_queue<Foo>* queue;
const int nthread;
Body( int nthread_ ) : nthread(nthread_) {}
- void operator()( const tbb::blocked_range<int>& r ) const {
+ void operator()( int thread_id ) const {
long pop_kind[3] = {0,0,0};
int serial[MAXTHREAD+1];
- memset( serial, 0, nthread*sizeof(unsigned) );
- ASSERT( r.begin()+1==r.end(), NULL );
- ASSERT( r.begin()<nthread, NULL );
- ASSERT( r.end()<=nthread, NULL );
+ memset( serial, 0, nthread*sizeof(int) );
+ ASSERT( thread_id<nthread, NULL );
long sum = 0;
- long thread_id = r.begin();
for( long j=0; j<M; ++j ) {
Foo f;
f.thread_id = 0xDEAD;
@@ -169,7 +165,7 @@ struct Body {
serial[f.thread_id] = f.serial;
sum += f.serial-1;
}
- Sum[r.begin()] = sum;
+ Sum[thread_id] = sum;
for( int k=0; k<3; ++k )
PopKind[k] += pop_kind[k];
}
@@ -198,7 +194,7 @@ void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
ASSERT( !queue.empty(), NULL );
}
tbb::tick_count t0 = tbb::tick_count::now();
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), body );
+ NativeParallelFor( nthread, body );
tbb::tick_count t1 = tbb::tick_count::now();
double timing = (t1-t0).seconds();
if( Verbose )
@@ -237,10 +233,15 @@ void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
#endif /* _WIN32||_WIN64 */
if( PopKind[k]<min_requirement ) {
if( trial>=max_trial ) {
- printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d)\n",
- nthread, long(PopKind[k]), k==0?"fail":"succeed", max_trial, min_requirement);
- printf("This problem may merely be unlucky scheduling.\n"
- "Investigate only if it happens repeatedly.\n");
+ if( Verbose )
+ printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d). "
+ "This problem may merely be unlucky scheduling. "
+ "Investigate only if it happens repeatedly.\n",
+ nthread, long(PopKind[k]), k==0?"failed":"succeeded", max_trial, min_requirement);
+ else
+ printf("Warning: the number of %s pop_if_present operations is less than expected for %d threads. Investigate if it happens repeatedly.\n",
+ k==0?"failed":"succeeded", nthread );
+
} else {
success = false;
}
@@ -250,6 +251,272 @@ void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
}
}
+class Bar {
+ enum state_t {
+ LIVE=0x1234,
+ DEAD=0xDEAD
+ };
+ state_t state;
+public:
+ ptrdiff_t my_id;
+ Bar() : state(LIVE), my_id(-1) {}
+ Bar(size_t _i) : state(LIVE), my_id(_i) {}
+ Bar( const Bar& a_bar ) : state(LIVE) {
+ ASSERT( a_bar.state==LIVE, NULL );
+ my_id = a_bar.my_id;
+ }
+ ~Bar() {
+ ASSERT( state==LIVE, NULL );
+ state = DEAD;
+ my_id = DEAD;
+ }
+ void operator=( const Bar& a_bar ) {
+ ASSERT( a_bar.state==LIVE, NULL );
+ ASSERT( state==LIVE, NULL );
+ my_id = a_bar.my_id;
+ }
+ friend bool operator==(const Bar& bar1, const Bar& bar2 ) ;
+} ;
+
+bool operator==(const Bar& bar1, const Bar& bar2) {
+ ASSERT( bar1.state==Bar::LIVE, NULL );
+ ASSERT( bar2.state==Bar::LIVE, NULL );
+ return bar1.my_id == bar2.my_id;
+}
+
+class BarIterator
+{
+ Bar* bar_ptr;
+ BarIterator(Bar* bp_) : bar_ptr(bp_) {}
+public:
+ ~BarIterator() {}
+ BarIterator& operator=( const BarIterator& other ) {
+ bar_ptr = other.bar_ptr;
+ return *this;
+ }
+ Bar& operator*() const {
+ return *bar_ptr;
+ }
+ BarIterator& operator++() {
+ ++bar_ptr;
+ return *this;
+ }
+ Bar* operator++(int) {
+ Bar* result = &operator*();
+ operator++();
+ return result;
+ }
+ friend bool operator==(const BarIterator& bia, const BarIterator& bib) ;
+ friend bool operator!=(const BarIterator& bia, const BarIterator& bib) ;
+ friend void TestConstructors ();
+} ;
+
+bool operator==(const BarIterator& bia, const BarIterator& bib) {
+ return bia.bar_ptr==bib.bar_ptr;
+}
+
+bool operator!=(const BarIterator& bia, const BarIterator& bib) {
+ return bia.bar_ptr!=bib.bar_ptr;
+}
+
+class Bar_exception : public std::bad_alloc {
+public:
+ virtual const char *what() const throw() { return "making the entry invalid"; }
+ virtual ~Bar_exception() throw() {}
+};
+
+class BarEx
+{
+ enum state_t {
+ LIVE=0x1234,
+ DEAD=0xDEAD
+ };
+ static int count;
+public:
+ state_t state;
+ typedef enum {
+ PREPARATION,
+ COPY_CONSTRUCT
+ } mode_t;
+ static mode_t mode;
+ ptrdiff_t my_id;
+ ptrdiff_t my_tilda_id;
+ static int button;
+ BarEx() : state(LIVE), my_id(-1), my_tilda_id(-1) {}
+ BarEx(size_t _i) : state(LIVE), my_id(_i), my_tilda_id(my_id^(-1)) {}
+ BarEx( const BarEx& a_bar ) : state(LIVE) {
+ ASSERT( a_bar.state==LIVE, NULL );
+ my_id = a_bar.my_id;
+ if( mode==PREPARATION )
+ if( !( ++count % 100 ) )
+ throw Bar_exception();
+ my_tilda_id = a_bar.my_tilda_id;
+ }
+ ~BarEx() {
+ ASSERT( state==LIVE, NULL );
+ state = DEAD;
+ my_id = DEAD;
+ }
+ static void set_mode( mode_t m ) { mode = m; }
+ void operator=( const BarEx& a_bar ) {
+ ASSERT( a_bar.state==LIVE, NULL );
+ ASSERT( state==LIVE, NULL );
+ my_id = a_bar.my_id;
+ my_tilda_id = a_bar.my_tilda_id;
+ }
+ friend bool operator==(const BarEx& bar1, const BarEx& bar2 ) ;
+} ;
+
+int BarEx::count = 0;
+BarEx::mode_t BarEx::mode = BarEx::PREPARATION;
+
+bool operator==(const BarEx& bar1, const BarEx& bar2) {
+ ASSERT( bar1.state==BarEx::LIVE, NULL );
+ ASSERT( bar2.state==BarEx::LIVE, NULL );
+ ASSERT( (bar1.my_id ^ bar1.my_tilda_id) == -1, NULL );
+ ASSERT( (bar2.my_id ^ bar2.my_tilda_id) == -1, NULL );
+ return bar1.my_id==bar2.my_id && bar1.my_tilda_id==bar2.my_tilda_id;
+}
+
+void TestConstructors ()
+{
+ tbb::concurrent_queue<Bar> src_queue;
+ tbb::concurrent_queue<Bar>::const_iterator dqb;
+ tbb::concurrent_queue<Bar>::const_iterator dqe;
+ tbb::concurrent_queue<Bar>::const_iterator iter;
+
+ for( size_t size=0; size<1001; ++size ) {
+ for( size_t i=0; i<size; ++i )
+ src_queue.push(Bar(i+(i^size)));
+ tbb::concurrent_queue<Bar>::const_iterator sqb(src_queue.begin());
+ tbb::concurrent_queue<Bar>::const_iterator sqe(src_queue.end());
+
+ tbb::concurrent_queue<Bar> dst_queue(sqb, sqe);
+
+ ASSERT(src_queue.size()==dst_queue.size(), "different size");
+
+ src_queue.clear();
+ }
+
+ Bar bar_array[1001];
+ for( size_t size=0; size<1001; ++size ) {
+ for( size_t i=0; i<size; ++i )
+ bar_array[i] = Bar(i+(i^size));
+
+ const BarIterator sab(bar_array+0);
+ const BarIterator sae(bar_array+size);
+
+ tbb::concurrent_queue<Bar> dst_queue2(sab, sae);
+
+ ASSERT( int(size)==dst_queue2.size(), NULL );
+ ASSERT( sab==BarIterator(bar_array+0), NULL );
+ ASSERT( sae==BarIterator(bar_array+size), NULL );
+
+ dqb = dst_queue2.begin();
+ dqe = dst_queue2.end();
+ BarIterator v_iter(sab);
+ for( ; dqb != dqe; ++dqb, ++v_iter )
+ ASSERT( *dqb == *v_iter, "unexpected element" );
+ ASSERT( v_iter==sae, "different size?" );
+ }
+
+ src_queue.clear();
+
+ tbb::concurrent_queue<Bar> dst_queue3( src_queue );
+ ASSERT( src_queue.size()==dst_queue3.size(), NULL );
+ ASSERT( 0==dst_queue3.size(), NULL );
+
+ int k=0;
+ for( size_t i=0; i<1001; ++i ) {
+ Bar tmp_bar;
+ src_queue.push(Bar(++k));
+ src_queue.push(Bar(++k));
+ src_queue.pop(tmp_bar);
+
+ tbb::concurrent_queue<Bar> dst_queue4( src_queue );
+
+ ASSERT( src_queue.size()==dst_queue4.size(), NULL );
+
+ dqb = dst_queue4.begin();
+ dqe = dst_queue4.end();
+ iter = src_queue.begin();
+
+ for( ; dqb != dqe; ++dqb, ++iter )
+ ASSERT( *dqb == *iter, "unexpected element" );
+
+ ASSERT( iter==src_queue.end(), "different size?" );
+ }
+
+ tbb::concurrent_queue<Bar> dst_queue5( src_queue );
+
+ ASSERT( src_queue.size()==dst_queue5.size(), NULL );
+ dqb = dst_queue5.begin();
+ dqe = dst_queue5.end();
+ iter = src_queue.begin();
+ for( ; dqb != dqe; ++dqb, ++iter )
+ ASSERT( *dqb == *iter, "unexpected element" );
+
+ for( size_t i=0; i<100; ++i) {
+ Bar tmp_bar;
+ src_queue.push(Bar(i+1000));
+ src_queue.push(Bar(i+1000));
+ src_queue.pop(tmp_bar);
+
+ dst_queue5.push(Bar(i+1000));
+ dst_queue5.push(Bar(i+1000));
+ dst_queue5.pop(tmp_bar);
+ }
+
+ ASSERT( src_queue.size()==dst_queue5.size(), NULL );
+ dqb = dst_queue5.begin();
+ dqe = dst_queue5.end();
+ iter = src_queue.begin();
+ for( ; dqb != dqe; ++dqb, ++iter )
+ ASSERT( *dqb == *iter, "unexpected element" );
+ ASSERT( iter==src_queue.end(), "different size?" );
+
+#if __GLIBC__==2&&__GLIBC_MINOR__==3
+ printf("Warning: Part of the construcor test is skipped due to a known issue.\n");
+#else
+ k = 0;
+ int n_elements=0;
+ tbb::concurrent_queue<BarEx> src_queue_ex;
+ for( size_t size=0; size<1001; ++size ) {
+ BarEx tmp_bar_ex;
+ int n_successful_pushes=0;
+ BarEx::set_mode( BarEx::PREPARATION );
+ try {
+ src_queue_ex.push(BarEx(k+(k^size)));
+ ++n_successful_pushes;
+ } catch (...) {
+ }
+ ++k;
+ try {
+ src_queue_ex.push(BarEx(k+(k^size)));
+ ++n_successful_pushes;
+ } catch (...) {
+ }
+ ++k;
+ src_queue_ex.pop(tmp_bar_ex);
+ n_elements += (n_successful_pushes - 1);
+ ASSERT( src_queue_ex.size()==n_elements, NULL);
+
+ BarEx::set_mode( BarEx::COPY_CONSTRUCT );
+ tbb::concurrent_queue<BarEx> dst_queue_ex( src_queue_ex );
+
+ ASSERT( src_queue_ex.size()==dst_queue_ex.size(), NULL );
+
+ tbb::concurrent_queue<BarEx>::const_iterator dqb_ex = dst_queue_ex.begin();
+ tbb::concurrent_queue<BarEx>::const_iterator dqe_ex = dst_queue_ex.end();
+ tbb::concurrent_queue<BarEx>::const_iterator iter_ex = src_queue_ex.begin();
+
+ for( ; dqb_ex != dqe_ex; ++dqb_ex, ++iter_ex )
+ ASSERT( *dqb_ex == *iter_ex, "unexpected element" );
+ ASSERT( iter_ex==src_queue_ex.end(), "different size?" );
+ }
+#endif
+}
+
template<typename Iterator1, typename Iterator2>
void TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {
// Now test iteration
@@ -290,6 +557,18 @@ void TestIteratorAssignment( Iterator2 j ) {
ASSERT( !(k!=j), NULL );
}
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+ AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+ AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+ AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
+ AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );
+ T x;
+ typename Iterator::reference xr = x;
+ typename Iterator::pointer xp = &x;
+ ASSERT( &xr==xp, NULL );
+}
+
//! Test the iterators for concurrent_queue
void TestIterator() {
tbb::concurrent_queue<Foo> queue;
@@ -306,9 +585,11 @@ void TestIterator() {
TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.begin() );
TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.begin() );
TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.begin() );
+ TestIteratorTraits<tbb::concurrent_queue<Foo>::const_iterator, const Foo>();
+ TestIteratorTraits<tbb::concurrent_queue<Foo>::iterator, Foo>();
}
-void TestConcurrenetQueueType() {
+void TestConcurrentQueueType() {
AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
Foo f;
const Foo g;
@@ -350,13 +631,48 @@ void TestFullQueue() {
}
}
+void TestClear() {
+ FooConstructed = 0;
+ FooDestroyed = 0;
+ const int n=5;
+ const int q_capacity=10;
+
+ tbb::concurrent_queue<Foo> queue;
+ queue.set_capacity(q_capacity);
+ for( int i=0; i<n; ++i ) {
+ Foo f;
+ f.serial = i;
+ bool result = queue.push_if_not_full( f );
+ ASSERT( result, NULL );
+ }
+ ASSERT( queue.size()==n, NULL );
+ queue.clear();
+ ASSERT( queue.size()==0, NULL );
+ for( int i=0; i<n; ++i ) {
+ Foo f;
+ f.serial = i;
+ bool result = queue.push_if_not_full( f );
+ ASSERT( result, NULL );
+ }
+ ASSERT( queue.size()==n, NULL );
+ queue.clear();
+ ASSERT( queue.size()==0, NULL );
+ for( int i=0; i<n; ++i ) {
+ Foo f;
+ f.serial = i;
+ bool result = queue.push_if_not_full( f );
+ ASSERT( result, NULL );
+ }
+ ASSERT( queue.size()==n, NULL );
+}
+
template<typename T>
-struct TestNegativeQueueBody {
+struct TestNegativeQueueBody: NoAssign {
tbb::concurrent_queue<T>& queue;
const int nthread;
TestNegativeQueueBody( tbb::concurrent_queue<T>& q, int n ) : queue(q), nthread(n) {}
- void operator()( const tbb::blocked_range<int>& range ) const {
- if( range.begin()==0 ) {
+ void operator()( int k ) const {
+ if( k==0 ) {
int number_of_pops = nthread-1;
// Wait for all pops to pend.
while( queue.size()>-number_of_pops ) {
@@ -381,10 +697,9 @@ struct TestNegativeQueueBody {
template<typename T>
void TestNegativeQueue( int nthread ) {
tbb::concurrent_queue<T> queue;
- NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), TestNegativeQueueBody<T>(queue,nthread) );
+ NativeParallelFor( nthread, TestNegativeQueueBody<T>(queue,nthread) );
}
-template<typename T>
void TestExceptions() {
typedef static_counting_allocator<std::allocator<FooEx>, size_t> allocator_t;
typedef static_counting_allocator<std::allocator<char>, size_t> allocator_char_t;
@@ -395,6 +710,8 @@ void TestExceptions() {
m_pop
};
+ if( Verbose )
+ printf("Testing exception safety\n");
// verify 'clear()' on exception; queue's destructor calls its clear()
{
concur_queue_t queue_clear;
@@ -402,11 +719,13 @@ void TestExceptions() {
allocator_char_t::init_counters();
allocator_char_t::set_limits(N/2);
for( int k=0; k<N; k++ )
- queue_clear.push( T() );
+ queue_clear.push( FooEx() );
} catch (...) {
// TODO: some assert here?
}
}
+ if( Verbose )
+ printf("... queue destruction test passed\n");
try {
int n_pushed=0, n_popped=0;
@@ -424,14 +743,14 @@ void TestExceptions() {
switch(m) {
case m_push:
for( int k=0; k<N; k++ ) {
- queue_test.push( T() );
+ queue_test.push( FooEx() );
n_pushed++;
}
break;
case m_pop:
n_popped=0;
for( int k=0; k<n_pushed; k++ ) {
- T elt;
+ FooEx elt;
queue_test.pop( elt );
n_popped++;
}
@@ -443,11 +762,11 @@ void TestExceptions() {
} catch ( Foo_exception & ) {
switch(m) {
case m_push: {
- ASSERT( queue_test.size()==(n_pushed+1), "incorrect queue size" );
+ ASSERT( queue_test.size()==n_pushed, "incorrect queue size" );
long tc = MaxFooCount;
MaxFooCount = 0;
for( int k=0; k<(int)tc; k++ ) {
- queue_test.push( T() );
+ queue_test.push( FooEx() );
n_pushed++;
}
MaxFooCount = tc;
@@ -457,13 +776,13 @@ void TestExceptions() {
MaxFooCount = 0; // disable exception
n_pushed -= (n_popped+1); // including one that threw an exception
for( int k=0; k<1000; k++ ) {
- queue_test.push( T() );
+ queue_test.push( FooEx() );
n_pushed++;
}
ASSERT( !queue_test.empty(), "queue must not be empty" );
ASSERT( queue_test.size()==n_pushed, "queue size must be equal to n pushed" );
for( int k=0; k<n_pushed; k++ ) {
- T elt;
+ FooEx elt;
queue_test.pop( elt );
}
ASSERT( queue_test.empty(), "queue must be empty" );
@@ -482,6 +801,8 @@ void TestExceptions() {
break;
}
}
+ if( Verbose )
+ printf("... for t=%d and m=%d, exception test passed\n", t, m);
}
}
} catch(...) {
@@ -497,8 +818,10 @@ int main( int argc, char* argv[] ) {
TestEmptyQueue<char>();
TestEmptyQueue<Foo>();
TestFullQueue();
- TestConcurrenetQueueType();
+ TestClear();
+ TestConcurrentQueueType();
TestIterator();
+ TestConstructors();
// Test concurrent operations
for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
@@ -514,7 +837,7 @@ int main( int argc, char* argv[] ) {
#if __GLIBC__==2&&__GLIBC_MINOR__==3
printf("Warning: Exception safety test is skipped due to a known issue.\n");
#else
- TestExceptions<FooEx>();
+ TestExceptions();
#endif
printf("done\n");
return 0;
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
index a199644..a68aa36 100644
--- a/src/test/test_concurrent_vector.cpp
+++ b/src/test/test_concurrent_vector.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -144,7 +144,7 @@ static void CheckVector( const vector_t& cv, size_t expected_size, size_t old_si
//! Test of assign, grow, copying with various sizes
void TestResizeAndCopy() {
- typedef static_counting_allocator<std::allocator<Foo>, std::size_t> allocator_t;
+ typedef static_counting_allocator<std::allocator<Foo>, std::size_t> allocator_t;
typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;
allocator_t::init_counters();
for( int old_size=0; old_size<=128; NextSize( old_size ) ) {
@@ -308,9 +308,12 @@ void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
template<typename Iterator1, typename Iterator2, typename V>
void CheckIteratorComparison( V& u ) {
+ V u2 = u;
Iterator1 i = u.begin();
+
for( int i_count=0; i_count<100; ++i_count ) {
Iterator2 j = u.begin();
+ Iterator2 i2 = u2.begin();
for( int j_count=0; j_count<100; ++j_count ) {
ASSERT( (i==j)==(i_count==j_count), NULL );
ASSERT( (i!=j)==(i_count!=j_count), NULL );
@@ -319,7 +322,10 @@ void CheckIteratorComparison( V& u ) {
ASSERT( (i>j)==(i_count>j_count), NULL );
ASSERT( (i<=j)==(i_count<=j_count), NULL );
ASSERT( (i>=j)==(i_count>=j_count), NULL );
+ ASSERT( !(i==i2), NULL );
+ ASSERT( i!=i2, NULL );
++j;
+ ++i2;
}
++i;
}
@@ -356,8 +362,10 @@ void TestSequentialFor() {
ASSERT( (*cp).is_const(), NULL );
ASSERT( cp->is_const(), NULL );
ASSERT( *cp == v.front(), NULL);
- for( int i=0; size_t(i)<u.size(); ++i, ++cp ) {
+ for( int i=0; size_t(i)<u.size(); ++i ) {
CheckConstIterator(u,i,cp);
+ V::const_iterator &cpr = ++cp;
+ ASSERT( &cpr == &cp, "preincrement not returning a reference?");
}
tbb::tick_count t2 = tbb::tick_count::now();
if( Verbose )
@@ -368,7 +376,8 @@ void TestSequentialFor() {
cp = u.end();
for( int i=int(u.size()); i>0; ) {
--i;
- --cp;
+ V::const_iterator &cpr = --cp;
+ ASSERT( &cpr == &cp, "predecrement not returning a reference?");
if( i>0 ) {
typename V::const_iterator cp_old = cp--;
int here = (*cp_old).bar();
@@ -387,14 +396,16 @@ void TestSequentialFor() {
CheckConstIterator(u,int(j),cp);
typename V::difference_type delta = i*3 % u.size();
if( 0<=j+delta && size_t(j+delta)<u.size() ) {
- cp += delta;
+ V::const_iterator &cpr = (cp += delta);
+ ASSERT( &cpr == &cp, "+= not returning a reference?");
j += delta;
}
delta = i*7 % u.size();
if( 0<=j-delta && size_t(j-delta)<u.size() ) {
- if( i&1 )
- cp -= delta; // Test operator-=
- else
+ if( i&1 ) {
+ V::const_iterator &cpr = (cp -= delta);
+ ASSERT( &cpr == &cp, "-= not returning a reference?");
+ } else
cp = cp - delta; // Test operator-
j -= delta;
}
@@ -471,7 +482,7 @@ static const size_t Modulus = 7;
typedef static_counting_allocator<tbb::cache_aligned_allocator<Foo> > MyAllocator;
typedef tbb::concurrent_vector<Foo, MyAllocator> MyVector;
-class GrowToAtLeast {
+class GrowToAtLeast: NoAssign {
MyVector& my_vector;
public:
void operator()( const tbb::blocked_range<size_t>& range ) const {
@@ -492,13 +503,18 @@ void TestConcurrentGrowToAtLeast() {
tbb::parallel_for( tbb::blocked_range<size_t>(0,10000*s,s), GrowToAtLeast(v) );
}
v.clear();
- size_t items_allocated = v.get_allocator().items_allocated, items_freed = v.get_allocator().items_freed;
- size_t allocations = v.get_allocator().allocations, frees = v.get_allocator().frees;
- ASSERT( items_allocated == items_freed, NULL); ASSERT( allocations == frees, NULL);
+ ASSERT( 0 == v.get_allocator().frees, NULL);
+ v.compact();
+ size_t items_allocated = v.get_allocator().items_allocated,
+ items_freed = v.get_allocator().items_freed;
+ size_t allocations = v.get_allocator().allocations,
+ frees = v.get_allocator().frees;
+ ASSERT( items_allocated == items_freed, NULL);
+ ASSERT( allocations == frees, NULL);
}
//! Test concurrent invocations of method concurrent_vector::grow_by
-class GrowBy {
+class GrowBy: NoAssign {
MyVector& my_vector;
public:
void operator()( const tbb::blocked_range<int>& range ) const {
@@ -548,11 +564,14 @@ void TestConcurrentGrowBy( int nthread ) {
}
delete[] found;
if( nthread>1 && inversions<m/10 )
- std::printf("WARNING: not much concurrency in TestConcurrentGrowBy\n");
- }
- size_t items_allocated = MyAllocator::items_allocated, items_freed = MyAllocator::items_freed;
- size_t allocations = MyAllocator::allocations, frees = MyAllocator::frees;
- ASSERT( items_allocated == items_freed, NULL); ASSERT( allocations == frees, NULL);
+ std::printf("Warning: not much concurrency in TestConcurrentGrowBy\n");
+ }
+ size_t items_allocated = MyAllocator::items_allocated,
+ items_freed = MyAllocator::items_freed;
+ size_t allocations = MyAllocator::allocations,
+ frees = MyAllocator::frees;
+ ASSERT( items_allocated == items_freed, NULL);
+ ASSERT( allocations == frees, NULL);
}
//! Test the assignment operator and swap
@@ -582,10 +601,14 @@ void TestAssign() {
ASSERT( v.size()==size_t(src_size), NULL );
for( int i=0; i<src_size; ++i )
ASSERT( v[i].bar()==i, NULL );
- size_t items_allocated = u.get_allocator().items_allocated, items_freed = u.get_allocator().items_freed;
- size_t allocations = u.get_allocator().allocations, frees = u.get_allocator().frees + 100;
- ASSERT( items_allocated == items_freed, NULL); ASSERT( allocations == frees, NULL);
- ASSERT( u.get_allocator().allocations == u.get_allocator().frees + 100, NULL);
+ ASSERT( 0 == u.get_allocator().frees, NULL);
+ u.compact(); // deallocate unused memory
+ size_t items_allocated = u.get_allocator().items_allocated,
+ items_freed = u.get_allocator().items_freed;
+ size_t allocations = u.get_allocator().allocations,
+ frees = u.get_allocator().frees + 100;
+ ASSERT( items_allocated == items_freed, NULL);
+ ASSERT( allocations == frees, NULL);
}
}
}
@@ -600,8 +623,8 @@ void TestComparison() {
var[0].assign(str[0].begin(), str[0].end());
var[1].assign(str[0].rbegin(), str[0].rend());
var[2].assign(var[1].rbegin(), var[1].rend()); // same as 0th
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
+ for (int i = 0; i < 3; ++i) {
+ for (int j = 0; j < 3; ++j) {
ASSERT( (var[i] == var[j]) == (str[i] == str[j]), NULL );
ASSERT( (var[i] != var[j]) == (str[i] != str[j]), NULL );
ASSERT( (var[i] < var[j]) == (str[i] < str[j]), NULL );
@@ -699,7 +722,7 @@ void TestSort() {
// Test exceptions safety (from allocator and items constructors)
//------------------------------------------------------------------------
template<typename MyVector>
-class GrowthException {
+class GrowthException: NoAssign {
MyVector& my_vector;
public:
static volatile bool my_cancel;
@@ -726,11 +749,12 @@ public:
}
GrowthException( MyVector& vector ) : my_vector(vector) { my_cancel = false; }
};
+
template<typename MyVector>
volatile bool GrowthException<MyVector>::my_cancel = false;
void TestExceptions() {
- typedef static_counting_allocator<std::allocator<Foo>, std::size_t> allocator_t;
+ typedef static_counting_allocator<std::allocator<Foo>, std::size_t> allocator_t;
typedef tbb::concurrent_vector<Foo, allocator_t> vector_t;
enum methods {
@@ -741,8 +765,8 @@ void TestExceptions() {
try {
vector_t src(FooIterator(0), FooIterator(N)); // original data
- for(int t = 0; t < 2; t++) // exception type
- for(int m = zero_method+1; m < all_methods; m++)
+ for(int t = 0; t < 2; ++t) // exception type
+ for(int m = zero_method+1; m < all_methods; ++m)
{
allocator_t::init_counters();
if(t) MaxFooCount = FooCount + N/2;
@@ -806,10 +830,10 @@ void TestExceptions() {
ASSERT(size == N, "unexpected size");
ASSERT(capacity >= N, "unexpected capacity");
int i;
- for(i = 1; true; i++)
+ for(i = 1; ; ++i)
if(!victim[i].zero_bar()) break;
else ASSERT(victim[i].bar() == (m == assign_ir)? i : Foo::initial_value_of_bar, NULL);
- for(; size_t(i) < size; i++) ASSERT(!victim[i].zero_bar(), NULL);
+ for(; size_t(i) < size; ++i) ASSERT(!victim[i].zero_bar(), NULL);
ASSERT(size_t(i) == size, NULL);
break;
}
@@ -819,7 +843,7 @@ void TestExceptions() {
{// not related to if(!t)
vector_t copy_of_victim(victim);
ASSERT(copy_of_victim.size() > 0, NULL);
- for(int i = 0; true; i++) {
+ for(int i = 0; ; ++i) {
try {
Foo &foo = victim.at(i);
int bar = t? foo.zero_bar() : foo.bar();
@@ -868,7 +892,6 @@ int main( int argc, char* argv[] ) {
if( MinThread<1 ) {
std::printf("ERROR: MinThread=%d, but must be at least 1\n",MinThread); MinThread = 1;
}
- known_issue_verbose = !Verbose;
TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();
TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();
diff --git a/src/test/test_eh_algorithms.cpp b/src/test/test_eh_algorithms.cpp
index c399f84..e99a7e4 100644
--- a/src/test/test_eh_algorithms.cpp
+++ b/src/test/test_eh_algorithms.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -33,9 +33,10 @@
#include "tbb/atomic.h"
#include "tbb/parallel_for.h"
#include "tbb/parallel_reduce.h"
+#include "tbb/parallel_do.h"
+#include "tbb/pipeline.h"
#include "tbb/blocked_range.h"
-#include <cmath>
#include <typeinfo>
#include "harness.h"
@@ -84,7 +85,10 @@ namespace util {
#endif /* !WIN */
inline intptr num_subranges ( intptr length, intptr grain ) {
- return (intptr)std::pow(2., std::ceil(std::log((double)length / grain) / std::log(2.)));
+ intptr n = 1;
+ for( ; length>grain; length-=length>>1 )
+ n*=2;
+ return n;
}
} // namespace util
@@ -114,7 +118,8 @@ public:
tbb::atomic<intptr> g_cur_executed, // number of times a body was requested to process data
g_exc_executed, // snapshot of execution statistics at the moment of the 1st exception throwing
g_catch_executed, // snapshot of execution statistics at the moment when the 1st exception is caught
- g_exceptions; // number of exceptions exposed to TBB users (i.e. intercepted by the test code)
+ g_exceptions, // number of exceptions exposed to TBB users (i.e. intercepted by the test code)
+ g_added_tasks_count; // number of tasks added by parallel_do feeder
util::tid_t g_master = 0;
@@ -128,7 +133,6 @@ bool g_exception_in_master = false;
bool g_solitary_exception = true;
volatile bool g_wait_completed = false;
-
void reset_globals () {
g_cur_executed = g_exc_executed = g_catch_executed = 0;
g_exceptions = 0;
@@ -138,6 +142,7 @@ void reset_globals () {
g_unknown_exception = false;
g_task_was_cancelled = false;
g_wait_completed = false;
+ g_added_tasks_count = 0;
}
void throw_test_exception ( intptr throw_threshold ) {
@@ -146,6 +151,7 @@ void throw_test_exception ( intptr throw_threshold ) {
if ( !g_solitary_exception ) {
__TBB_CompareAndSwapW(&g_exc_executed, g_cur_executed, 0);
TRACE ("About to throw one of multiple test_exceptions (thread %08x):", util::get_my_tid());
+ g_exception_thrown = 1;
throw (test_exception(EXCEPTION_DESCR));
}
while ( g_cur_executed < throw_threshold )
@@ -176,6 +182,7 @@ void throw_test_exception ( intptr throw_threshold ) {
}
#define ASSERT_EXCEPTION() \
+ ASSERT (g_exception_thrown ? !g_no_exception : g_no_exception, "throw without catch or catch without throw"); \
ASSERT (!g_no_exception, "no exception occurred"); \
ASSERT (!g_unknown_exception, "unknown exception was caught");
@@ -228,41 +235,82 @@ void Test0 () {
}
} // void Test0 ()
+//! Template that creates a functor suitable for parallel_reduce from a functor for parallel_for.
+template<typename ForBody>
+class ReduceBody: NoAssign {
+ ForBody my_body;
+public:
+ void operator()( const range_type& r ) const {my_body(r);}
+ ReduceBody( count_type c ) : my_body(c) {}
+ ReduceBody( ReduceBody& left, tbb::split ) : my_body(left.my_body) {}
+ void join( ReduceBody& /*right*/ ) {}
+};
+
+//! Test parallel_for and parallel_reduce for a given partitioner.
+/** The Body need only be suitable for a parallel_for. */
+template<typename Body, typename Partitioner>
+void TestParallelLoopAux( Partitioner& partitioner ) {
+ for( int i=0; i<2; ++i ) {
+ TRACEP ("");
+ reset_globals();
+ TRY();
+ if( i==0 )
+ tbb::parallel_for( range_type(0, ITER_RANGE, ITER_GRAIN), Body(ITER_RANGE/3), partitioner );
+ else {
+ ReduceBody<Body> rb(ITER_RANGE/3);
+ tbb::parallel_reduce( range_type(0, ITER_RANGE, ITER_GRAIN), rb, partitioner );
+ }
+ CATCH_AND_ASSERT();
+ ASSERT (!no_exception, "No exception thrown from the nesting parallel_for");
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TRACE ("Executed at the end of test %d; number of exceptions", (intptr)g_cur_executed);
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ }
+}
+
+//! Test with parallel_for and parallel_reduce, over all three kinds of partitioners.
+/** The Body need only be suitable for a parallel_for. */
+template<typename Body>
+void TestParallelLoop() {
+ // The simple and auto partitioners should be const, but not the affinity partitioner.
+ const tbb::simple_partitioner p0;
+ TestParallelLoopAux<Body>( p0 );
+ const tbb::auto_partitioner p1;
+ TestParallelLoopAux<Body>( p1 );
+ tbb::affinity_partitioner p2;
+ TestParallelLoopAux<Body>( p2 );
+}
-class simple_pfor_body {
+class simple_pfor_body: NoAssign {
+ const count_type my_throw_limit;
public:
+ simple_pfor_body( count_type throw_limit=0 ) : my_throw_limit(throw_limit) {}
void operator()( const range_type& r ) const {
volatile long x;
count_type end = r.end();
- for( count_type i=r.begin(); i<end; ++i )
+ for( count_type i=r.begin(); i!=end; ++i )
x = 0;
++g_cur_executed;
if ( g_exception_in_master ^ (util::get_my_tid() == g_master) )
{
- //while ( g_no_exception ) __TBB_Yield();
// Make absolutely sure that worker threads on multicore machines had a chance to steal something
util::sleep(10);
}
- throw_test_exception(1);
+ if( my_throw_limit<r.end() )
+ throw_test_exception(1);
}
};
-void Test1 () {
- TRACEP ("");
- reset_globals();
- TRY();
- tbb::parallel_for( range_type(0, ITER_RANGE, ITER_GRAIN), simple_pfor_body() ); // , tbb::simple_partitioner()
- CATCH_AND_ASSERT();
- ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
- TRACE ("Executed at the end of test %d; number of exceptions", (intptr)g_cur_executed);
- ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
- if ( !g_solitary_exception )
- ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+void Test1() {
+ TestParallelLoop<simple_pfor_body>();
} // void Test1 ()
-
-class nesting_pfor_body {
+class nesting_pfor_body: NoAssign {
+ const count_type my_throw_limit;
public:
+ nesting_pfor_body( count_type throw_limit=0 ) : my_throw_limit(throw_limit) {}
void operator()( const range_type& ) const {
++g_cur_executed;
if ( util::get_my_tid() == g_master )
@@ -277,27 +325,15 @@ public:
(nesting parallel_for body) in this test, they will cancel all the sibling nested
algorithms. **/
void Test2 () {
- TRACEP ("");
- reset_globals();
- TRY();
- tbb::parallel_for( range_type(0, NESTING_RANGE, NESTING_GRAIN), nesting_pfor_body() );
- CATCH_AND_ASSERT();
- ASSERT (!no_exception, "No exception thrown from the nesting parallel_for");
- //if ( g_solitary_exception )
- ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
- TRACE ("Executed at the end of test %d", (intptr)g_cur_executed);
- ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
- if ( !g_solitary_exception )
- ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TestParallelLoop<nesting_pfor_body>();
} // void Test2 ()
-
class nesting_pfor_with_isolated_context_body {
public:
void operator()( const range_type& ) const {
tbb::task_group_context ctx(tbb::task_group_context::isolated);
++g_cur_executed;
-// util::sleep(1); // Give other threads a chance to steal their first tasks
+ // Give other threads a chance to steal their first tasks
__TBB_Yield();
tbb::parallel_for( tbb::blocked_range<size_t>(0, NESTED_RANGE, NESTED_GRAIN), simple_pfor_body(), tbb::simple_partitioner(), ctx );
}
@@ -400,7 +436,7 @@ volatile bool my_cancellator_task::s_cancellator_ready = false;
class pfor_body_to_cancel {
public:
- void operator()( const range_type& r ) const {
+ void operator()( const range_type& ) const {
++g_cur_executed;
do {
__TBB_Yield();
@@ -461,7 +497,7 @@ public:
class pfor_body_to_cancel_2 {
public:
- void operator()( const range_type& r ) const {
+ void operator()( const range_type& ) const {
++g_cur_executed;
// The test will hang (and be timed out by the test system) if is_cancelled() is broken
while( !tbb::task::self().is_cancelled() ) __TBB_Yield();
@@ -552,7 +588,6 @@ void Test7 () {
}
void RunTests () {
- TRACE ("Number of threads %d", g_num_threads);
tbb::task_scheduler_init init (g_num_threads);
g_master = util::get_my_tid();
@@ -567,6 +602,1151 @@ void RunTests () {
Test7();
}
+// Parallel_do testing
+
+#define ITER_TEST_NUMBER_OF_ELEMENTS 1000
+
+// Forward iterator type
+template <class T>
+class ForwardIterator {
+ size_t * my_ptr;
+public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef typename std::allocator<T>::difference_type difference_type;
+ typedef typename std::allocator<T>::pointer pointer;
+ typedef typename std::allocator<T>::reference reference;
+
+ ForwardIterator ( size_t * ptr ) : my_ptr(ptr){}
+
+ ForwardIterator ( const ForwardIterator& r ) : my_ptr(r.my_ptr){}
+
+ size_t& operator* () { return *my_ptr; }
+
+ ForwardIterator& operator++ () { ++my_ptr; return *this; }
+
+ bool operator== ( const ForwardIterator& r ) { return my_ptr == r.my_ptr; }
+};
+
+
+template <class T>
+class RandomIterator {
+ size_t * my_ptr;
+public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef typename std::allocator<T>::difference_type difference_type;
+ typedef typename std::allocator<T>::pointer pointer;
+ typedef typename std::allocator<T>::reference reference;
+
+ RandomIterator ( size_t * ptr ) : my_ptr(ptr){}
+
+ RandomIterator ( const RandomIterator& r ) : my_ptr(r.my_ptr){}
+
+ size_t& operator* () { return *my_ptr; }
+
+ RandomIterator& operator++ () { ++my_ptr; return *this; }
+
+ bool operator== ( const RandomIterator& r ) { return my_ptr == r.my_ptr; }
+ size_t operator- (const RandomIterator &r) {return my_ptr - r.my_ptr;}
+ RandomIterator operator+ (size_t n) {return RandomIterator(my_ptr + n);}
+};
+
+// Simple functor object, no exception throwing
+class nothrow_pdo_body
+{
+public:
+ //! This form of the function call operator can be used when the body needs to add more work during the processing
+ void operator() ( size_t &value ) const {
+ value = value + 1000;
+ }
+}; // class nothrow_pdo_body
+
+// Simple functor object with feeder, no exception throwing
+class nothrow_pdo_body_with_feeder
+{
+public:
+ //! This form of the function call operator can be used when the body needs to add more work during the processing
+ void operator() ( size_t &value, tbb::parallel_do_feeder<size_t>& feeder ) const {
+ value = value + 1000;
+
+ if (g_added_tasks_count < 500 )
+ {
+ g_added_tasks_count ++;
+ feeder.add(0);
+ }
+ }
+}; // class nothrow_pdo_body_with_feeder
+
+// Test parallel_do without exceptions throwing
+template <class Iterator> void Test0_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+ size_t values[ITER_TEST_NUMBER_OF_ELEMENTS];
+
+ for (int i =0; i < ITER_TEST_NUMBER_OF_ELEMENTS; i++) values[i] = i;
+
+ Iterator begin(&values[0]);
+ Iterator end(&values[ITER_TEST_NUMBER_OF_ELEMENTS - 1]);
+ tbb::parallel_do<Iterator, nothrow_pdo_body>(begin, end, nothrow_pdo_body());
+ g_added_tasks_count = 0;
+ tbb::parallel_do<Iterator, nothrow_pdo_body_with_feeder>(begin, end, nothrow_pdo_body_with_feeder());
+} // void Test0_parallel_do_forward ()
+
+// Simple functor object with exception
+class simple_pdo_body
+{
+public:
+ //! This form of the function call operator can be used when the body needs to add more work during the processing
+ void operator() ( size_t &value ) const {
+ value = value + 1000;
+
+ ++g_cur_executed;
+ if ( g_exception_in_master ^ (util::get_my_tid() == g_master) )
+ {
+ // Make absolutely sure that worker threads on multicore machines had a chance to steal something
+ util::sleep(10);
+ }
+ throw_test_exception(1);
+ }
+}; // class simple_pdo_body
+
+// Simple functor object with exception and feeder
+class simple_pdo_body_feeder
+{
+public:
+ //! This form of the function call operator can be used when the body needs to add more work during the processing
+ void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ value = value + 1000;
+ if (g_added_tasks_count < 500) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ ++g_cur_executed;
+ if ( g_exception_in_master ^ (util::get_my_tid() == g_master) )
+ {
+ // Make absolutely sure that worker threads on multicore machines had a chance to steal something
+ util::sleep(10);
+ }
+ throw_test_exception(1);
+ }
+}; // class simple_pdo_body_feeder
+
+// Tests exceptions without nesting
+template <class Iterator, class simple_body> void Test1_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+
+ size_t test_vector[ITER_TEST_NUMBER_OF_ELEMENTS + 1];
+
+ for (int i =0; i < ITER_TEST_NUMBER_OF_ELEMENTS; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[ITER_TEST_NUMBER_OF_ELEMENTS]);
+
+ g_added_tasks_count = 0;
+
+ TRY();
+ tbb::parallel_do<Iterator, simple_body>(begin, end, simple_body() );
+ CATCH_AND_ASSERT();
+
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TRACE ("Executed at the end of test %d; number of exceptions", (intptr)g_cur_executed);
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+
+} // void Test1_parallel_do ()
+
+
+template <class Iterator> class nesting_pdo_body {
+public:
+ void operator()( size_t& /*value*/ ) const {
+ ++g_cur_executed;
+ if ( util::get_my_tid() == g_master )
+ yield_if_singlecore();
+
+ size_t test_vector[101];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body());
+ }
+};
+
+template <class Iterator> class nesting_pdo_body_feeder {
+public:
+ void operator()( size_t& /*value*/, tbb::parallel_do_feeder<size_t>& feeder ) const {
+ ++g_cur_executed;
+
+ if (g_added_tasks_count < 500) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ if ( util::get_my_tid() == g_master )
+ yield_if_singlecore();
+
+ size_t test_vector[101];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body());
+ }
+};
+
+//! Uses parallel_do body containing a nested parallel_do with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+ exceptions thrown from the nested parallel_do are not handled by the caller
+ (nesting parallel_do body) in this test, they will cancel all the sibling nested
+ algorithms. **/
+template <class Iterator, class nesting_body> void Test2_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+
+ size_t test_vector[ITER_TEST_NUMBER_OF_ELEMENTS + 1];
+
+ for (int i =0; i < ITER_TEST_NUMBER_OF_ELEMENTS; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[ITER_TEST_NUMBER_OF_ELEMENTS]);
+
+ g_added_tasks_count = 0;
+
+ TRY();
+ tbb::parallel_do<Iterator, nesting_body >(begin, end, nesting_body() );
+ CATCH_AND_ASSERT();
+
+ ASSERT (!no_exception, "No exception thrown from the nesting parallel_for");
+ //if ( g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TRACE ("Executed at the end of test %d", (intptr)g_cur_executed);
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+} // void Test2_parallel_do ()
+
+template <class Iterator> class nesting_pdo_with_isolated_context_body {
+public:
+ void operator()( size_t& /*value*/ ) const {
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+
+ __TBB_Yield();
+ size_t test_vector[101];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body(), ctx);
+ }
+};
+
+template <class Iterator> class nesting_pdo_with_isolated_context_body_and_feeder {
+public:
+ void operator()( size_t& /*value*/, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+
+ if (g_added_tasks_count < 50) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ __TBB_Yield();
+ size_t test_vector[101];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body(), ctx);
+ }
+};
+
+//! Uses parallel_do body invoking a nested parallel_do with an isolated context without a try-block.
+/** Even though exceptions thrown from the nested parallel_do are not handled
+ by the caller in this test, they will not affect sibling nested algorithms
+ already running because of the isolated contexts. However because the first
+ exception cancels the root parallel_do only the first g_num_threads subranges
+ will be processed (which launch nested parallel_dos) **/
+template <class Iterator, class nesting_body> void Test3_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+ intptr nested_body_calls = 100,
+ min_num_calls = (g_num_threads - 1) * nested_body_calls;
+
+ size_t test_vector[101];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ TRY();
+ tbb::parallel_do<Iterator, nesting_body >(begin, end,nesting_body());
+ CATCH_AND_ASSERT();
+
+ ASSERT (!no_exception, "No exception thrown from the nesting parallel_for");
+ TRACE ("Executed at the end of test %d", (intptr)g_cur_executed);
+ if ( g_solitary_exception ) {
+ ASSERT (g_cur_executed > min_num_calls, "Too few tasks survived exception");
+ ASSERT (g_cur_executed <= min_num_calls + (g_catch_executed + g_num_threads), "Too many tasks survived exception");
+ }
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+} // void Test3_parallel_do ()
+
+
+template <class Iterator> class nesting_pdo_with_eh_body {
+public:
+ void operator()( size_t& /*value*/ ) const {
+ size_t test_vector[100];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+ TRY();
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body(), ctx);
+ CATCH();
+ }
+};
+
+template <class Iterator> class nesting_pdo_with_eh_body_and_feeder: NoAssign {
+public:
+ void operator()( size_t &/*value*/, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ size_t test_vector[100];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ if (g_added_tasks_count < 5) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+ TRY();
+ tbb::parallel_do<Iterator, simple_pdo_body>(begin, end, simple_pdo_body(), ctx);
+ CATCH();
+ }
+};
+
+
+//! Uses parallel_for body invoking a nested parallel_for (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the nested parallel_for are handled by the caller
+ in this test, they do not affect neither other tasks of the the root parallel_for
+ nor sibling nested algorithms. **/
+
+template <class Iterator, class nesting_body_with_eh> void Test4_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+
+ intptr nested_body_calls = 100,
+ nesting_body_calls = 10,
+ calls_in_normal_case = nesting_body_calls * nested_body_calls;
+
+ size_t test_vector[10];
+
+ for (int i =0; i < 10; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[10]);
+
+ TRY();
+ tbb::parallel_do<Iterator, nesting_body_with_eh>(begin, end, nesting_body_with_eh());
+ CATCH();
+ ASSERT (no_exception, "All exceptions must have been handled in the parallel_do body");
+ TRACE ("Executed %d (normal case %d), exceptions %d, in master only? %d", (intptr)g_cur_executed, calls_in_normal_case, (intptr)g_exceptions, g_exception_in_master);
+ intptr min_num_calls = 0;
+ if ( g_solitary_exception ) {
+ min_num_calls = calls_in_normal_case - nested_body_calls;
+ ASSERT (g_exceptions == 1, "No exception registered");
+ ASSERT (g_cur_executed <= min_num_calls + g_num_threads, "Too many tasks survived exception");
+ }
+ else if ( !g_exception_in_master ) {
+ // Each nesting body + at least 1 of its nested body invocations
+ nesting_body_calls += g_added_tasks_count;
+ min_num_calls = 2 * nesting_body_calls;
+ ASSERT (g_exceptions > 1 && g_exceptions <= nesting_body_calls, "Unexpected actual number of exceptions");
+ ASSERT (g_cur_executed >= min_num_calls + (nesting_body_calls - g_exceptions) * nested_body_calls, "Too few tasks survived exception");
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived multiple exceptions");
+ // Additional nested_body_calls accounts for the minimal amount of tasks spawned
+ // by not throwing threads. In the minimal case it is either the master thread or the only worker.
+ ASSERT (g_cur_executed <= min_num_calls + (nesting_body_calls - g_exceptions + 1) * nested_body_calls + g_exceptions + g_num_threads, "Too many tasks survived exception");
+ }
+} // void Test4_parallel_do ()
+
+class pdo_body_to_cancel {
+public:
+ void operator()( size_t& /*value*/ ) const {
+ ++g_cur_executed;
+ do {
+ util::sleep(10);
+ __TBB_Yield();
+ } while( !my_cancellator_task::s_cancellator_ready );
+ }
+};
+
+class pdo_body_to_cancel_with_feeder {
+public:
+ void operator()( size_t& /*value*/, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ ++g_cur_executed;
+
+ if (g_added_tasks_count < 50) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ do {
+ util::sleep(10);
+ __TBB_Yield();
+ } while( !my_cancellator_task::s_cancellator_ready );
+ }
+};
+
+template<class B, class Iterator>
+class my_worker_pdo_task : public tbb::task
+{
+ tbb::task_group_context &my_ctx;
+
+ tbb::task* execute () {
+ size_t test_vector[100];
+
+ for (int i =0; i < 100; i++) test_vector[i] = i;
+
+ Iterator begin(&test_vector[0]);
+ Iterator end(&test_vector[100]);
+
+ tbb::parallel_do<Iterator, B>( begin, end, B(), my_ctx );
+ return NULL;
+ }
+public:
+ my_worker_pdo_task ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+template <class Iterator, class body_to_cancel> void Test5_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+ g_throw_exception = false;
+ intptr threshold = 10;
+ tbb::task_group_context ctx;
+ ctx.reset();
+ my_cancellator_task::s_cancellator_ready = false;
+ tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+ r.set_ref_count(3);
+ r.spawn( *new( r.allocate_child() ) my_cancellator_task(ctx, threshold) );
+ __TBB_Yield();
+ r.spawn( *new( r.allocate_child() ) my_worker_pdo_task<body_to_cancel, Iterator>(ctx) );
+ TRY();
+ r.wait_for_all();
+ CATCH();
+ r.destroy(r);
+ ASSERT (no_exception, "Cancelling tasks should not cause any exceptions");
+ ASSERT (g_cur_executed < g_catch_executed + g_num_threads, "Too many tasks were executed after cancellation");
+} // void Test5_parallel_do ()
+
+
+class pdo_body_to_cancel_2 {
+public:
+ void operator()( size_t& /*value*/ ) const {
+ ++g_cur_executed;
+ // The test will hang (and be timed out by the tesst system) if is_cancelled() is broken
+ while( !tbb::task::self().is_cancelled() ) __TBB_Yield();
+ }
+};
+
+class pdo_body_to_cancel_2_with_feeder {
+public:
+ void operator()( size_t& /*value*/, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ ++g_cur_executed;
+
+ if (g_added_tasks_count < 50) {
+ g_added_tasks_count++;
+ feeder.add(0);
+ }
+
+ // The test will hang (and be timed out by the tesst system) if is_cancelled() is broken
+ while( !tbb::task::self().is_cancelled() ) __TBB_Yield();
+ }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+/** This version also tests task::is_cancelled() method. **/
+template <class Iterator, class body_to_cancel> void Test6_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+ tbb::task_group_context ctx;
+ tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+ r.set_ref_count(3);
+ r.spawn( *new( r.allocate_child() ) my_cancellator_2_task(ctx) );
+ __TBB_Yield();
+ r.spawn( *new( r.allocate_child() ) my_worker_pdo_task<body_to_cancel, Iterator>(ctx) );
+ TRY();
+ r.wait_for_all();
+ CATCH();
+ r.destroy(r);
+ ASSERT (no_exception, "Cancelling tasks should not cause any exceptions");
+ ASSERT (g_cur_executed <= g_catch_executed, "Some tasks were executed after cancellation");
+} // void Test6_parallel_do ()
+
+// This body throws an exception only if the task was added by feeder
+class pdo_body_exception_only_in_task_added_by_feeder
+{
+public:
+ //! This form of the function call operator can be used when the body needs to add more work during the processing
+ void operator() ( size_t &value, tbb::parallel_do_feeder<size_t> &feeder ) const {
+ ++g_cur_executed;
+
+ if (g_added_tasks_count < 50) {
+ g_added_tasks_count++;
+ feeder.add(1);
+ }
+
+ if (value == 1) throw_test_exception(1);
+ }
+}; // class pdo_body_exception_only_in_task_added_by_feeder
+
+// Test exception in task, which was added by feeder.
+template <class Iterator> void Test8_parallel_do () {
+ TRACEP ("");
+ reset_globals();
+ size_t values[ITER_TEST_NUMBER_OF_ELEMENTS];
+
+ for (int i =0; i < ITER_TEST_NUMBER_OF_ELEMENTS; i++) values[i] = 0;
+
+ Iterator begin(&values[0]);
+ Iterator end(&values[ITER_TEST_NUMBER_OF_ELEMENTS - 1]);
+ TRY();
+ tbb::parallel_do<Iterator, pdo_body_exception_only_in_task_added_by_feeder>(begin, end, pdo_body_exception_only_in_task_added_by_feeder());
+ CATCH();
+
+ TRACE ("Executed at the end of test %d; number of exceptions", (intptr)g_cur_executed);
+ if (g_solitary_exception)
+ ASSERT (!no_exception, "At least one exception should occur");
+} // void Test8_parallel_do ()
+
+
+void RunParallelDoTests() {
+ tbb::task_scheduler_init init (g_num_threads);
+ g_master = util::get_my_tid();
+
+ Test0_parallel_do<RandomIterator<size_t> >();
+ Test0_parallel_do<ForwardIterator<size_t> >();
+#if !(__GLIBC__==2&&__GLIBC_MINOR__==3)
+ Test1_parallel_do<RandomIterator<size_t>, simple_pdo_body >();
+ Test1_parallel_do<RandomIterator<size_t>, simple_pdo_body_feeder >();
+ Test1_parallel_do<ForwardIterator<size_t>, simple_pdo_body >();
+ Test1_parallel_do<ForwardIterator<size_t>, simple_pdo_body_feeder >();
+ Test2_parallel_do<RandomIterator<size_t>, nesting_pdo_body<RandomIterator<size_t> > >();
+ Test2_parallel_do<RandomIterator<size_t>, nesting_pdo_body_feeder<RandomIterator<size_t> > >();
+ Test2_parallel_do<ForwardIterator<size_t>, nesting_pdo_body<ForwardIterator<size_t> > >();
+ Test2_parallel_do<ForwardIterator<size_t>, nesting_pdo_body_feeder<ForwardIterator<size_t> > >();
+ Test3_parallel_do<ForwardIterator<size_t>, nesting_pdo_with_isolated_context_body<ForwardIterator<size_t> > >();
+ Test3_parallel_do<RandomIterator<size_t>, nesting_pdo_with_isolated_context_body<RandomIterator<size_t> > >();
+ Test3_parallel_do<ForwardIterator<size_t>, nesting_pdo_with_isolated_context_body_and_feeder<ForwardIterator<size_t> > >();
+ Test3_parallel_do<RandomIterator<size_t>, nesting_pdo_with_isolated_context_body_and_feeder<RandomIterator<size_t> > >();
+ Test4_parallel_do<ForwardIterator<size_t>, nesting_pdo_with_eh_body<ForwardIterator<size_t> > >();
+ Test4_parallel_do<RandomIterator<size_t>, nesting_pdo_with_eh_body<RandomIterator<size_t> > >();
+ Test4_parallel_do<ForwardIterator<size_t>, nesting_pdo_with_eh_body_and_feeder<ForwardIterator<size_t> > >();
+ Test4_parallel_do<RandomIterator<size_t>, nesting_pdo_with_eh_body_and_feeder<RandomIterator<size_t> > >();
+#endif
+ Test5_parallel_do<ForwardIterator<size_t>, pdo_body_to_cancel >();
+ Test5_parallel_do<RandomIterator<size_t>, pdo_body_to_cancel >();
+ Test5_parallel_do<ForwardIterator<size_t>, pdo_body_to_cancel_with_feeder >();
+ Test5_parallel_do<RandomIterator<size_t>, pdo_body_to_cancel_with_feeder >();
+ Test6_parallel_do<ForwardIterator<size_t>, pdo_body_to_cancel_2 >();
+ Test6_parallel_do<RandomIterator<size_t>, pdo_body_to_cancel_2 >();
+ Test6_parallel_do<ForwardIterator<size_t>, pdo_body_to_cancel_2_with_feeder >();
+ Test6_parallel_do<RandomIterator<size_t>, pdo_body_to_cancel_2_with_feeder >();
+#if !(__GLIBC__==2&&__GLIBC_MINOR__==3)
+ Test8_parallel_do<ForwardIterator<size_t> >();
+ Test8_parallel_do<RandomIterator<size_t> >();
+#endif
+}
+
+// Pipeline testing
+#define TEST_PROLOGUE() \
+ TRACEP (""); \
+ { \
+ tbb::task_scheduler_init init (g_num_threads); \
+ g_master = util::get_my_tid(); \
+ reset_globals(); \
+
+#define TEST_EPILOGUE() \
+ } \
+
+const size_t buffer_size = 100,
+ data_end_tag = size_t(~0);
+
+size_t g_num_tokens = 0;
+
+// Simple input filter class, it assigns 1 to all array members
+// It stops when it receives item equal to -1
+class input_filter: public tbb::filter {
+ tbb::atomic<size_t> my_item;
+ size_t my_buffer[buffer_size + 1];
+
+public:
+ input_filter() : tbb::filter(parallel) {
+ my_item = 0;
+ for (size_t i = 0; i < buffer_size; ++i ) {
+ my_buffer[i] = 1;
+ }
+ my_buffer[buffer_size] = data_end_tag;
+ }
+
+ void* operator()( void* ) {
+ size_t item = my_item.fetch_and_increment();
+ if ( item >= buffer_size ) { // end of input
+ return NULL;
+ }
+ size_t &value = my_buffer[item];
+ value = 1;
+ return &value;
+ }
+
+ size_t* buffer() { return my_buffer; }
+}; // class input_filter
+
+// Pipeline filter, without exceptions throwing
+class no_throw_filter: public tbb::filter {
+ size_t my_value;
+public:
+ enum operation {
+ addition,
+ subtraction,
+ multiplication
+ } my_operation;
+
+ no_throw_filter(operation _operation, size_t value, bool is_parallel)
+ : filter(is_parallel? tbb::filter::parallel : tbb::filter::serial_in_order),
+ my_value(value), my_operation(_operation)
+ {}
+ void* operator()(void* item) {
+ size_t &value = *(size_t*)item;
+ ASSERT(value != data_end_tag, "terminator element is being processed");
+ switch (my_operation){
+ case addition:
+ value += my_value;
+ break;
+ case subtraction:
+ value -= my_value;
+ break;
+ case multiplication:
+ value *= my_value;
+ break;
+ default:
+ ASSERT(0, "Wrong operation parameter passed to no_throw_filter");
+ } // switch (my_operation)
+ return item;
+ }
+};
+
+// Test pipeline without exceptions throwing
+void Test0_pipeline () {
+ TEST_PROLOGUE()
+
+ // Run test when serial filter is the first non-input filter
+ input_filter my_input_filter;
+ no_throw_filter my_filter_1(no_throw_filter::addition, 99, false);
+ no_throw_filter my_filter_2(no_throw_filter::subtraction, 90, true);
+ no_throw_filter my_filter_3(no_throw_filter::multiplication, 5, false);
+ // Result should be 50 for all items except the last
+
+ tbb::pipeline my_pipeline;
+ my_pipeline.add_filter(my_input_filter);
+ my_pipeline.add_filter(my_filter_1);
+ my_pipeline.add_filter(my_filter_2);
+ my_pipeline.add_filter(my_filter_3);
+ my_pipeline.run(8);
+
+ for (size_t i = 0; i < buffer_size; ++i) {
+ ASSERT(my_input_filter.buffer()[i] == 50, "pipeline didn't process items properly");
+ }
+ TEST_EPILOGUE()
+} // void Test0_pipeline ()
+
+// Simple filter with exception throwing
+class simple_filter : public tbb::filter
+{
+public:
+ simple_filter (tbb::filter::mode _mode ) : filter (_mode) {}
+
+ void* operator()(void* item) {
+ ++g_cur_executed;
+ if ( g_exception_in_master ^ (util::get_my_tid() == g_master) )
+ {
+ // Make absolutely sure that worker threads on multicore machines had a chance to steal something
+ util::sleep(10);
+ }
+ throw_test_exception(1);
+
+ return item;
+ }
+}; // class simple_filter
+
+// This enumeration represents filters order in pipeline
+enum filter_set {
+ parallel__parallel=0,
+ parallel__serial=1,
+ parallel__serial_out_of_order=2,
+ serial__parallel=4,
+ serial__serial=5,
+ serial__serial_out_of_order=6,
+ serial_out_of_order__parallel=8,
+ serial_out_of_order__serial=9,
+ serial_out_of_order__serial_out_of_order=10
+};
+
+// The function returns filter type using filter number in set
+tbb::filter::mode filter_mode (filter_set set, int number)
+{
+ size_t tmp = set << (2 * (2 - number));
+ switch (tmp&12){
+ case 0:
+ return tbb::filter::parallel;
+ case 4:
+ return tbb::filter::serial_in_order;
+ case 8:
+ return tbb::filter::serial_out_of_order;
+ }
+ ASSERT(0, "Wrong filter set passed to get_filter_type");
+ return tbb::filter::parallel; // We should never get here, just to prevent compiler warnings
+}
+
+
+template<typename InputFilter, typename Filter>
+class custom_pipeline : protected tbb::pipeline {
+ typedef tbb::pipeline base;
+ InputFilter my_input_filter;
+ Filter my_filter_1;
+ Filter my_filter_2;
+
+public:
+ custom_pipeline( filter_set filter_set )
+ : my_filter_1(filter_mode(filter_set, 1))
+ , my_filter_2(filter_mode(filter_set, 2))
+ {
+ add_filter(my_input_filter);
+ add_filter(my_filter_1);
+ add_filter(my_filter_2);
+ }
+ void run () { base::run(g_num_tokens); }
+ void run ( tbb::task_group_context& ctx ) { base::run(g_num_tokens, ctx); }
+ using base::add_filter;
+};
+
+typedef custom_pipeline<input_filter, simple_filter> simple_pipeline;
+
+// Tests exceptions without nesting
+void Test1_pipeline ( filter_set mode ) {
+ TEST_PROLOGUE()
+
+ simple_pipeline test_pipeline(mode);
+ TRY();
+ test_pipeline.run();
+ if ( g_cur_executed == 2 * buffer_size ) {
+ // In case of all serial filters they might be all executed in the thread(s)
+ // where exceptions are not allowed by the common test logic. So we just quit.
+ return;
+ }
+ CATCH_AND_ASSERT();
+
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TRACE ("Executed at the end of test %d; number of exceptions", (intptr)g_cur_executed);
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+
+ TEST_EPILOGUE()
+} // void Test1_pipeline ()
+
+// Filter with nesting
+class nesting_filter : public tbb::filter
+{
+public:
+ nesting_filter(tbb::filter::mode _mode )
+ : filter ( _mode)
+ {}
+
+ void* operator()(void* item) {
+ ++g_cur_executed;
+ if ( util::get_my_tid() == g_master )
+ yield_if_singlecore();
+
+ simple_pipeline test_pipeline(serial__parallel);
+ test_pipeline.run();
+
+ return item;
+ }
+}; // class nesting_filter
+
+//! Uses pipeline containing a nested pipeline with the default context not wrapped by a try-block.
+/** Nested algorithms are spawned inside the new bound context by default. Since
+ exceptions thrown from the nested pipeline are not handled by the caller
+ (nesting pipeline body) in this test, they will cancel all the sibling nested
+ algorithms. **/
+void Test2_pipeline ( filter_set mode ) {
+ TEST_PROLOGUE()
+
+ custom_pipeline<input_filter, nesting_filter> test_pipeline(mode);
+ TRY();
+ test_pipeline.run();
+ CATCH_AND_ASSERT();
+
+ ASSERT (!no_exception, "No exception thrown from the nesting pipeline");
+ //if ( g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TRACE ("Executed at the end of test %d", (intptr)g_cur_executed);
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TEST_EPILOGUE()
+} // void Test2_pipeline ()
+
+class nesting_filter_with_isolated_context : public tbb::filter
+{
+public:
+ nesting_filter_with_isolated_context(tbb::filter::mode _mode )
+ : filter ( _mode)
+ {}
+
+ void* operator()(void* item) {
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+ __TBB_Yield();
+ simple_pipeline test_pipeline(serial__parallel);
+ test_pipeline.run(ctx);
+ return item;
+ }
+}; // class nesting_filter_with_isolated_context
+
+//! Uses pipeline invoking a nested pipeline with an isolated context without a try-block.
+/** Even though exceptions thrown from the nested pipeline are not handled
+ by the caller in this test, they will not affect sibling nested algorithms
+ already running because of the isolated contexts. However because the first
+ exception cancels the root parallel_do only the first g_num_threads subranges
+ will be processed (which launch nested pipelines) **/
+void Test3_pipeline ( filter_set mode ) {
+ TEST_PROLOGUE()
+ intptr nested_body_calls = 100,
+ min_num_calls = (g_num_threads - 1) * nested_body_calls;
+
+ custom_pipeline<input_filter, nesting_filter_with_isolated_context> test_pipeline(mode);
+ TRY();
+ test_pipeline.run();
+ CATCH_AND_ASSERT();
+
+ ASSERT (!no_exception, "No exception thrown from the nesting parallel_for");
+ TRACE ("Executed at the end of test %d", (intptr)g_cur_executed);
+ if ( g_solitary_exception ) {
+ ASSERT (g_cur_executed > min_num_calls, "Too few tasks survived exception");
+ ASSERT (g_cur_executed <= min_num_calls + (g_catch_executed + g_num_threads), "Too many tasks survived exception");
+ }
+ ASSERT (g_exceptions == 1, "No try_blocks in any body expected in this test");
+ if ( !g_solitary_exception )
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived exception");
+ TEST_EPILOGUE();
+} // void Test3_pipeline ()
+
+class nesting_filter_with_eh_body : public tbb::filter
+{
+public:
+ nesting_filter_with_eh_body(tbb::filter::mode _mode )
+ : filter ( _mode)
+ {}
+
+ void* operator()(void* item) {
+ tbb::task_group_context ctx(tbb::task_group_context::isolated);
+ ++g_cur_executed;
+ simple_pipeline test_pipeline(serial__parallel);
+ TRY();
+ test_pipeline.run(ctx);
+ CATCH();
+ return item;
+ }
+}; // class nesting_filter_with_eh_body
+
+//! Uses pipeline body invoking a nested pipeline (with default bound context) inside a try-block.
+/** Since exception(s) thrown from the nested pipeline are handled by the caller
+ in this test, they do not affect neither other tasks of the the root pipeline
+ nor sibling nested algorithms. **/
+
+void Test4_pipeline ( filter_set mode ) {
+ TEST_PROLOGUE()
+
+ intptr nested_body_calls = buffer_size + 1,
+ nesting_body_calls = 2 * (buffer_size + 1),
+ calls_in_normal_case = nesting_body_calls * nested_body_calls;
+
+ custom_pipeline<input_filter, nesting_filter_with_eh_body> test_pipeline(mode);
+ TRY();
+ test_pipeline.run();
+ CATCH_AND_ASSERT();
+
+
+ ASSERT (no_exception, "All exceptions must have been handled in the parallel_do body");
+ TRACE ("Executed %d (normal case %d), exceptions %d, in master only? %d", (intptr)g_cur_executed, calls_in_normal_case, (intptr)g_exceptions, g_exception_in_master);
+ intptr min_num_calls = 0;
+ if ( g_solitary_exception ) {
+ min_num_calls = calls_in_normal_case - nested_body_calls;
+ ASSERT (g_exceptions == 1, "No exception registered");
+ ASSERT (g_cur_executed <= min_num_calls + g_num_threads, "Too many tasks survived exception");
+ }
+ else if ( !g_exception_in_master ) {
+ // Each nesting body + at least 1 of its nested body invocations
+ nesting_body_calls += g_added_tasks_count;
+ min_num_calls = 2 * nesting_body_calls;
+ ASSERT (g_exceptions > 1 && g_exceptions <= nesting_body_calls, "Unexpected actual number of exceptions");
+ ASSERT (g_cur_executed <= g_catch_executed + g_num_threads, "Too many tasks survived multiple exceptions");
+ // Additional nested_body_calls accounts for the minimal amount of tasks spawned
+ // by not throwing threads. In the minimal case it is either the master thread or the only worker.
+ ASSERT (g_cur_executed <= min_num_calls + (nesting_body_calls - g_exceptions + 1) * nested_body_calls + g_exceptions + g_num_threads, "Too many tasks survived exception");
+ }
+ TEST_EPILOGUE()
+} // void Test4_pipeline ()
+
+
+class filter_to_cancel : public tbb::filter
+{
+public:
+ filter_to_cancel(bool is_parallel)
+ : filter ( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order)
+ {}
+
+ void* operator()(void* item) {
+ ++g_cur_executed;
+ do {
+ util::sleep(10);
+ __TBB_Yield();
+ } while( !my_cancellator_task::s_cancellator_ready );
+ return item;
+ }
+}; // class filter_to_cancel
+
+
+template <class Filter_to_cancel> class my_worker_pipeline_task : public tbb::task
+{
+ tbb::task_group_context &my_ctx;
+
+public:
+ my_worker_pipeline_task ( tbb::task_group_context& ctx ) : my_ctx(ctx) {}
+
+ tbb::task* execute () {
+ // Run test when serial filter is the first non-input filter
+ input_filter my_input_filter;
+ Filter_to_cancel my_filter_to_cancel(true);
+
+ tbb::pipeline my_pipeline;
+ my_pipeline.add_filter(my_input_filter);
+ my_pipeline.add_filter(my_filter_to_cancel);
+
+ my_pipeline.run(g_num_tokens, my_ctx);
+
+ return NULL;
+ }
+
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+void Test5_pipeline () {
+ TEST_PROLOGUE()
+
+ g_throw_exception = false;
+ intptr threshold = 10;
+ tbb::task_group_context ctx;
+ ctx.reset();
+ my_cancellator_task::s_cancellator_ready = false;
+ tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+ r.set_ref_count(3);
+ r.spawn( *new( r.allocate_child() ) my_cancellator_task(ctx, threshold) );
+ __TBB_Yield();
+ r.spawn( *new( r.allocate_child() ) my_worker_pipeline_task<filter_to_cancel>(ctx) );
+ TRY();
+ r.wait_for_all();
+ CATCH();
+ r.destroy(r);
+ ASSERT (no_exception, "Cancelling tasks should not cause any exceptions");
+ ASSERT (g_cur_executed < g_catch_executed + g_num_threads, "Too many tasks were executed after cancellation");
+ TEST_EPILOGUE()
+} // void Test5_pipeline ()
+
+class filter_to_cancel_2 : public tbb::filter {
+public:
+ filter_to_cancel_2(bool is_parallel)
+ : filter ( is_parallel ? tbb::filter::parallel : tbb::filter::serial_in_order)
+ {}
+
+ void* operator()(void* item) {
+ ++g_cur_executed;
+ // The test will hang (and be timed out by the tesst system) if is_cancelled() is broken
+ while( !tbb::task::self().is_cancelled() ) __TBB_Yield();
+ return item;
+ }
+};
+
+//! Test for cancelling an algorithm from outside (from a task running in parallel with the algorithm).
+/** This version also tests task::is_cancelled() method. **/
+void Test6_pipeline () {
+ TEST_PROLOGUE()
+
+ tbb::task_group_context ctx;
+ tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+ r.set_ref_count(3);
+ r.spawn( *new( r.allocate_child() ) my_cancellator_2_task(ctx) );
+ __TBB_Yield();
+ r.spawn( *new( r.allocate_child() ) my_worker_pipeline_task<filter_to_cancel_2>(ctx) );
+ TRY();
+ r.wait_for_all();
+ CATCH();
+ r.destroy(r);
+ ASSERT (no_exception, "Cancelling tasks should not cause any exceptions");
+ ASSERT (g_cur_executed <= g_catch_executed, "Some tasks were executed after cancellation");
+ TEST_EPILOGUE()
+} // void Test6_pipeline ()
+
+//! Testing filter::finalize method
+const int FINALIZE_SIZE_OF_EACH_BUFFER = buffer_size + 1;
+const int FINALIZE_NUMBER_OF_BUFFERS = 10000;
+tbb::atomic<size_t> allocated_count; // Number of currently allocated buffers
+tbb::atomic<size_t> total_count; // Total number of allocated buffers
+
+//! Base class for all filters involved in finalize method testing
+class finalize_base_filter: public tbb::filter{
+public:
+ finalize_base_filter (tbb::filter::mode _mode)
+ : filter ( _mode)
+ {}
+
+ // Deletes buffers if exception occured
+ virtual void finalize( void* item ) {
+ size_t* my_item = (size_t*)item;
+ delete[] my_item;
+ allocated_count--;
+ }
+};
+
+//! Input filter to test finalize method
+class finalize_input_filter: public finalize_base_filter {
+public:
+ finalize_input_filter() : finalize_base_filter(tbb::filter::serial)
+ {
+ total_count = 0;
+ }
+ void* operator()( void* ){
+ if (total_count == FINALIZE_NUMBER_OF_BUFFERS) {
+ return NULL;
+ }
+
+ size_t* item = new size_t[FINALIZE_SIZE_OF_EACH_BUFFER];
+ for (int i = 0; i < FINALIZE_SIZE_OF_EACH_BUFFER; i++)
+ item[i] = 1;
+ total_count++;
+ allocated_count ++;
+ return item;
+ }
+};
+
+// The filter multiplies each buffer item by 10.
+class finalize_process_filter: public finalize_base_filter {
+public:
+ finalize_process_filter (tbb::filter::mode _mode) : finalize_base_filter (_mode) {}
+
+ void* operator()( void* item){
+ if (total_count > FINALIZE_NUMBER_OF_BUFFERS / 2)
+ throw_test_exception(1);
+
+ size_t* my_item = (size_t*)item;
+ for (int i = 0; i < FINALIZE_SIZE_OF_EACH_BUFFER; i++)
+ my_item[i] *= 10;
+
+ return item;
+ }
+};
+
+// Output filter deletes previously allocated buffer
+class finalize_output_filter: public finalize_base_filter {
+public:
+ finalize_output_filter (tbb::filter::mode _mode) : finalize_base_filter (_mode) {}
+
+ void* operator()( void* item){
+ size_t* my_item = (size_t*)item;
+ delete[] my_item;
+ allocated_count--;
+
+ return NULL; // not used
+ }
+};
+
+//! Tests filter::finalize method
+void Test8_pipeline (filter_set mode) {
+ TEST_PROLOGUE()
+
+ allocated_count = 0;
+
+ custom_pipeline<finalize_input_filter, finalize_process_filter> test_pipeline(mode);
+ finalize_output_filter my_output_filter(tbb::filter::parallel);
+
+ test_pipeline.add_filter(my_output_filter);
+ TRY();
+ test_pipeline.run();
+ //TRACEP("Pipeline run finished\n");
+ CATCH();
+
+ TEST_EPILOGUE()
+
+ ASSERT (allocated_count == 0, "Memory leak: Some my_object weren't destroyed");
+} // void Test8_pipeline ()
+
+// Tests pipeline function passed with different combination of filters
+template<void pipeline_test(filter_set)>
+void TestWithDifferentFilters() {
+ pipeline_test(parallel__parallel);
+ pipeline_test(parallel__serial);
+ pipeline_test(parallel__serial_out_of_order);
+ pipeline_test(serial__parallel);
+ pipeline_test(serial__serial);
+ pipeline_test(serial__serial_out_of_order);
+ pipeline_test(serial_out_of_order__parallel);
+ pipeline_test(serial_out_of_order__serial);
+ pipeline_test(serial_out_of_order__serial_out_of_order);
+}
+
+void RunPipelineTests() {
+ g_num_tokens = 2 * g_num_threads;
+
+ Test0_pipeline();
+#if !(__GLIBC__==2&&__GLIBC_MINOR__==3)
+ TestWithDifferentFilters<Test1_pipeline>();
+ TestWithDifferentFilters<Test2_pipeline>();
+#endif /* __GLIBC__ */
+ Test5_pipeline();
+ Test6_pipeline();
+#if !(__GLIBC__==2&&__GLIBC_MINOR__==3)
+ TestWithDifferentFilters<Test8_pipeline>();
+#endif
+}
+
#endif /* __TBB_EXCEPTIONS */
@@ -578,6 +1758,8 @@ void RunTests () {
the test is run only for 2 sizes of the thread pool (MinThread and MaxThread)
to be able to test the high and low contention modes while keeping the test reasonably fast **/
int main(int argc, char* argv[]) {
+ // Set default minimum number of threads
+ MinThread = 2;
ParseCommandLine( argc, argv );
MinThread = min(MinThread, MaxThread);
ASSERT (MinThread>=2, "Minimal number of threads must be 2 or more");
@@ -585,12 +1767,15 @@ int main(int argc, char* argv[]) {
#if __TBB_EXCEPTIONS
int step = max(MaxThread - MinThread, 1);
for ( g_num_threads = MinThread; g_num_threads <= MaxThread; g_num_threads += step ) {
+ TRACE ("Number of threads %d", g_num_threads);
g_max_concurrency = min(g_num_threads, tbb::task_scheduler_init::default_num_threads());
// Execute in all the possible modes
for ( size_t j = 0; j < 4; ++j ) {
g_exception_in_master = (j & 1) == 1;
g_solitary_exception = (j & 2) == 1;
RunTests();
+ RunParallelDoTests();
+ RunPipelineTests();
}
}
#if __GLIBC__==2&&__GLIBC_MINOR__==3
diff --git a/src/test/test_eh_tasks.cpp b/src/test/test_eh_tasks.cpp
index 41f12b5..3e5aa7f 100644
--- a/src/test/test_eh_tasks.cpp
+++ b/src/test/test_eh_tasks.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -217,7 +217,42 @@ inline void wait_for_exception_with_timeout ( int timeout = 50000 ) {
#define ASSERT_TEST_POSTCOND() \
ASSERT (g_cur_stat.existed() >= g_cur_stat.executed(), "Total number of tasks is less than executed"); \
+ ASSERT (!g_cur_stat.existing(), "Not all task objects have been destroyed");
+#define TEST_PROLOGUE() \
+ TRACEP (""); \
+ { \
+ tbb::task_scheduler_init init (g_num_threads); \
+ g_master = internal::GetThreadSpecific(); \
+ reset_globals();
+
+#define TEST_EPILOGUE() \
+ } \
+ ASSERT_TEST_POSTCOND()
+
+class my_throwing_task : public tbb::task {
+public:
+ tbb::task* execute () { throw 0; }
+ ~my_throwing_task() {
+ ASSERT( tbb::task::self().is_owned_by_current_thread(), NULL );
+ }
+};
+
+//! Checks if innermost running task information is updated correctly during cancellation processing
+void Test0 () {
+ tbb::task_scheduler_init init (1);
+ tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
+ tbb::task_list tl;
+ tl.push_back( *new( r.allocate_child() ) my_throwing_task );
+ tl.push_back( *new( r.allocate_child() ) my_throwing_task );
+ r.set_ref_count( 3 );
+ try {
+ r.spawn_and_wait_for_all( tl );
+ }
+ catch (...) {
+ }
+ r.destroy( r );
+}
class my_base_task : public tbb::task
{
@@ -282,8 +317,7 @@ public:
/** Allocates a root task that spawns a bunch of children, one or several of which throw
a test exception in a worker or master thread (depending on the global setting). **/
void Test1 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
ASSERT (!g_cur_stat.existing() && !g_cur_stat.existed() && !g_cur_stat.executed(),
"something wrong with the task accounting");
@@ -302,8 +336,8 @@ void Test1 () {
TRY();
r.wait_for_all();
CATCH_AND_ASSERT();
- ASSERT_TEST_POSTCOND();
r.destroy(r);
+ TEST_EPILOGUE();
} // void Test1 ()
//! Default exception behavior test.
@@ -313,8 +347,7 @@ void Test1 () {
of the test function body.) **/
void Test2 ()
{
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
my_simple_root_task &r = *new( tbb::task::allocate_root() ) my_simple_root_task;
ASSERT (g_cur_stat.existing() == 1 && g_cur_stat.existed() == 1 && !g_cur_stat.executed(),
"something wrong with the task accounting");
@@ -322,7 +355,7 @@ void Test2 ()
tbb::task::spawn_root_and_wait(r);
CATCH_AND_ASSERT();
ASSERT (!g_no_exception, "no exception occurred");
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test2 ()
//! The same as Test2() except the root task has explicit context.
@@ -330,8 +363,7 @@ void Test2 ()
with a root task. **/
void Test3 ()
{
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
tbb::task_group_context ctx(tbb::task_group_context::bound);
my_simple_root_task &r = *new( tbb::task::allocate_root(ctx) ) my_simple_root_task;
ASSERT (g_cur_stat.existing() == 1 && g_cur_stat.existed() == 1 && !g_cur_stat.executed(),
@@ -340,7 +372,7 @@ void Test3 ()
tbb::task::spawn_root_and_wait(r);
CATCH_AND_ASSERT();
ASSERT (!g_no_exception, "no exception occurred");
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test2 ()
class my_root_with_context_launcher_task : public my_base_task
@@ -367,8 +399,7 @@ public:
isolated context, which at last spawns a bunch of children each, one of which
throws a test exception in a worker thread. **/
void Test4 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
tbb::task_list tl;
for ( size_t i = 0; i < NUM_ROOT_TASKS; ++i ) {
my_root_with_context_launcher_task &r = *new( tbb::task::allocate_root() ) my_root_with_context_launcher_task;
@@ -383,8 +414,7 @@ void Test4 () {
ASSERT (g_cur_stat.existed() == num_tasks_expected, "Wrong total number of tasks");
if ( g_solitary_exception )
ASSERT (g_cur_stat.executed() >= num_tasks_expected - NUM_CHILD_TASKS, "Unexpected number of executed tasks");
- ASSERT_TEST_POSTCOND();
-
+ TEST_EPILOGUE();
} // void Test4 ()
class my_root_with_context_group_launcher_task : public my_base_task
@@ -409,8 +439,7 @@ class my_root_with_context_group_launcher_task : public my_base_task
with an isolated context shared by all group members, which at last spawn a bunch
of children each, one of which throws a test exception in a worker thread. **/
void Test5 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
tbb::task_list tl;
for ( size_t i = 0; i < NUM_ROOTS_IN_GROUP; ++i ) {
my_root_with_context_group_launcher_task &r = *new( tbb::task::allocate_root() ) my_root_with_context_group_launcher_task;
@@ -426,7 +455,7 @@ void Test5 () {
intptr min_num_tasks_executed = num_tasks_expected - NUM_ROOT_TASKS * (NUM_CHILD_TASKS + 1);
ASSERT (g_cur_stat.executed() >= min_num_tasks_executed, "Too few tasks executed");
}
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test5 ()
class my_throwing_root_with_context_launcher_task : public my_base_task
@@ -496,8 +525,7 @@ public:
in the end. Leaves do not generate exceptions. The test exception is generated
by one of the 2nd level roots. **/
void Test6 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
my_bound_hierarchy_launcher_task &r = *new( tbb::task::allocate_root() ) my_bound_hierarchy_launcher_task;
TRY();
tbb::task::spawn_root_and_wait(r);
@@ -511,12 +539,12 @@ void Test6 () {
intptr num_tasks_expected = 1 + NUM_ROOT_TASKS * (2 + NUM_CHILD_TASKS);
intptr min_num_tasks_created = 1 + g_num_threads * 2 + NUM_CHILD_TASKS;
// 2 stands for my_bound_hierarchy_launcher_task and my_simple_root_task
- // g_num_threads corresponds to my_bound_hierarchy_launcher_task
- intptr min_num_tasks_executed = 2 + g_num_threads + NUM_CHILD_TASKS;
+ // 1 corresponds to my_bound_hierarchy_launcher_task
+ intptr min_num_tasks_executed = 2 + 1 + NUM_CHILD_TASKS;
ASSERT (g_cur_stat.existed() <= num_tasks_expected, "Number of expected tasks is calculated incorrectly");
ASSERT (g_cur_stat.existed() >= min_num_tasks_created, "Too few tasks created");
ASSERT (g_cur_stat.executed() >= min_num_tasks_executed, "Too few tasks executed");
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test6 ()
//! Tests task_group_context::unbind and task_group_context::reset methods.
@@ -526,14 +554,13 @@ void Test6 () {
in the end. Leaves do not generate exceptions. The test exception is generated
by one of the 2nd level roots. **/
void Test7 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
my_bound_hierarchy_launcher_task &r = *new( tbb::task::allocate_root() ) my_bound_hierarchy_launcher_task;
TRY();
tbb::task::spawn_root_and_wait(r);
CATCH_AND_ASSERT();
ASSERT (no_exception, "unexpected exception intercepted");
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test6 ()
class my_bound_hierarchy_launcher_task_2 : public my_base_task
@@ -561,8 +588,7 @@ class my_bound_hierarchy_launcher_task_2 : public my_base_task
root with the bound context, and these 3rd level roots spawn bunches of leaves
in the end. The test exception is generated by one of the leaves. **/
void Test8 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
my_bound_hierarchy_launcher_task_2 &r = *new( tbb::task::allocate_root() ) my_bound_hierarchy_launcher_task_2;
TRY();
tbb::task::spawn_root_and_wait(r);
@@ -577,7 +603,7 @@ void Test8 () {
ASSERT (g_cur_stat.existed() >= min_num_tasks_created, "Too few tasks created");
ASSERT (g_cur_stat.executed() >= min_num_tasks_executed, "Too few tasks executed");
}
- ASSERT_TEST_POSTCOND();
+ TEST_EPILOGUE();
} // void Test8 ()
@@ -614,8 +640,7 @@ public:
//! Test for cancelling a task hierarchy from outside (from a task running in parallel with it).
void Test9 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
g_throw_exception = false;
g_tasks_wait_limit = g_num_threads - 1;
intptr threshold = NUM_CHILD_TASKS / 4;
@@ -633,6 +658,7 @@ void Test9 () {
//ASSERT_WARNING (g_exc_stat.executed() - threshold <= g_num_threads + 2, "too many tasks executed between reaching threshold and statistics cutoff");
// 3 - all root tasks
ASSERT (g_cur_stat.executed() <= g_exc_stat.executed() + g_num_threads + 3, "Too many tasks were executed after cancellation");
+ TEST_EPILOGUE();
} // void Test9 ()
@@ -698,8 +724,7 @@ class my_leaf_task_with_movable_exceptions : public my_base_task
/** Allocates a root task that spawns a bunch of children, one or several of which throw
a movable exception in a worker or master thread (depending on the global settings). **/
void Test10 () {
- TRACEP ("");
- reset_globals();
+ TEST_PROLOGUE();
tbb::empty_task &r = *new( tbb::task::allocate_root() ) tbb::empty_task;
ASSERT (!g_cur_stat.existing() && !g_cur_stat.existed() && !g_cur_stat.executed(),
"something wrong with the task accounting");
@@ -741,9 +766,9 @@ void Test10 () {
g_no_exception = false;
g_unknown_exception = unknown_exception = true;
}
- ASSERT_EXCEPTION();
- ASSERT_TEST_POSTCOND();
r.destroy(r);
+ ASSERT_EXCEPTION();
+ TEST_EPILOGUE();
} // void Test10 ()
@@ -751,11 +776,7 @@ void Test10 () {
void TestExceptionHandling ()
{
TRACE ("Number of threads %d", g_num_threads);
- {
- tbb::task_scheduler_init init (g_num_threads);
- g_master = internal::GetThreadSpecific();
- util::sleep(20);
Test1();
Test2();
Test3();
@@ -766,12 +787,6 @@ void TestExceptionHandling ()
Test8();
Test9();
Test10();
- util::sleep(20);
- }
- ASSERT (!g_cur_stat.existing(), "Not all tasks objects have been destroyed");
- // The following assertion must hold true because if the dummy context is not cleaned up
- // properly none of the tasks after Test1 completion will be executed.
- ASSERT (g_cur_stat.executed(), "Scheduler's dummy task context has not been cleaned up properly");
}
#endif /* __TBB_EXCEPTIONS */
@@ -788,6 +803,8 @@ int main(int argc, char* argv[]) {
MinThread = std::min<int>(MinThread, MaxThread);
ASSERT (MinThread>=2, "Minimal number of threads must be 2 or more");
#if __TBB_EXCEPTIONS
+ // Test0 always runs with one thread
+ Test0();
int step = max(MaxThread - MinThread, 1);
for ( g_num_threads = MinThread; g_num_threads <= MaxThread; g_num_threads += step ) {
g_max_concurrency = min(g_num_threads, tbb::task_scheduler_init::default_num_threads());
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
index 1427034..b8f9c79 100644
--- a/src/test/test_halt.cpp
+++ b/src/test/test_halt.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -48,16 +48,17 @@ using namespace tbb;
// *** Serial shared by mutexes *** //
int SharedI = 1, SharedN;
template<typename M>
-class SharedSerialFibBody {
+class SharedSerialFibBody: NoAssign {
M &mutex;
public:
SharedSerialFibBody( M &m ) : mutex( m ) {}
//! main loop
- void operator()( const blocked_range<int>& range ) const {
+ void operator()( const blocked_range<int>& /*range*/ ) const {
for(;;) {
typename M::scoped_lock lock( mutex );
if(SharedI >= SharedN) break;
- volatile double sum = 7.3; sum *= 11.17;
+ volatile double sum = 7.3;
+ sum *= 11.17;
++SharedI;
}
}
@@ -67,7 +68,9 @@ public:
template<class M>
void SharedSerialFib(int n)
{
- SharedI = 1; SharedN = n; M mutex;
+ SharedI = 1;
+ SharedN = n;
+ M mutex;
parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
}
@@ -82,7 +85,7 @@ void Measure(const char *name, MeasureFunc func, int n)
tick_count t0;
tick_count::interval_t T;
if( Verbose )
- printf(name);
+ printf("%s",name);
t0 = tick_count::now();
for(int number = 2; number <= n; number++)
func(number);
diff --git a/src/test/test_handle_perror.cpp b/src/test/test_handle_perror.cpp
index a111c6b..ef49048 100644
--- a/src/test/test_handle_perror.cpp
+++ b/src/test/test_handle_perror.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
index 86a7fc7..88c5235 100644
--- a/src/test/test_inits_loop.cpp
+++ b/src/test/test_inits_loop.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -73,10 +73,8 @@ bool exec_test(const char *self) {
}
return true;
}
-#endif /* __APPLE__ */
int main( int argc, char * argv[] ) {
-#if __APPLE__
MinThread = 3000;
ParseCommandLine( argc, argv );
if( MinThread <= 0 ) {
@@ -90,8 +88,14 @@ int main( int argc, char * argv[] ) {
printf("done\n");
}
+ return 0;
+}
+
#else
- printf("skip\n");
-#endif
+
+int main() {
+ printf("skip\n");
return 0;
}
+
+#endif /* __APPLE__ */
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
index e6c4dde..6057d3d 100644
--- a/src/test/test_malloc_compliance.cpp
+++ b/src/test/test_malloc_compliance.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -63,10 +63,10 @@ void limitMem( int limit )
#define __TBB_NO_IMPLICIT_LINKAGE 1
#include "../tbb/tbb_assert_impl.h"
-#include "tbb/blocked_range.h"
#include "harness.h"
-
-#pragma pack(1)
+#if __linux__
+#include <stdint.h> // uintptr_t
+#endif
#define COUNT_ELEM_CALLOC 2
#define COUNT_TESTS 1000
@@ -92,12 +92,12 @@ typedef void* TestCalloc(size_t num, size_t size);
typedef void* TestRealloc(void* memblock, size_t size);
typedef void TestFree(void* memblock);
-TestMalloc* Tmalloc;
-TestCalloc* Tcalloc;
+TestMalloc* Tmalloc;
+TestCalloc* Tcalloc;
TestRealloc* Trealloc;
-TestFree* Tfree;
-
+TestFree* Tfree;
+bool error_occurred = false;
struct MemStruct
{
@@ -108,44 +108,56 @@ struct MemStruct
class CMemTest
{
UINT CountErrors;
-public:
bool FullLog;
+ static bool firstTime;
- CMemTest();
- CMemTest(bool verb);
+ CMemTest& operator=(const CMemTest& x);
+public:
+
+ CMemTest(bool isVerbose = false)
+ : CountErrors()
+ {
+ srand((UINT)time(NULL));
+ FullLog=isVerbose;
+ rand();
+ }
+ CMemTest(const CMemTest& x)
+ : CountErrors(x.CountErrors), FullLog(x.FullLog)
+ {}
+
void ReallocParam(); // realloc with different parameters
void InvariantDataRealloc(); //realloc does not change data
void NULLReturn(UINT MinSize, UINT MaxSize); // NULL pointer + check errno
void UniquePointer(); // unique pointer - check with padding
void AddrArifm(); // unique pointer - check with pointer arithmetic
+ bool ShouldReportError();
void Free_NULL(); //
void Zerofilling(); // check if arrays are zero-filled
- void RunAllTests();
- ~CMemTest() {};
+ void RunAllTests(int id);
+ ~CMemTest() {}
};
int argC;
char** argV;
-struct RoundRobin {
+struct RoundRobin: NoAssign {
const long number_of_threads;
- mutable CMemTest test;
- RoundRobin( long p ) : number_of_threads(p) ,test() {}
+ mutable CMemTest test;
+ RoundRobin( long p, bool verbose ) : number_of_threads(p), test(verbose) {}
- void operator()( const tbb::blocked_range<long> &r ) const
+ void operator()( int id ) const
{
- test.FullLog=Verbose;
- test.RunAllTests();
+ test.RunAllTests(id);
}
};
-
+bool CMemTest::firstTime = true;
int main(int argc, char* argv[])
{
- argC=argc;
- argV=argv;
- MaxThread = MinThread = 1;
+ argC=argc;
+ argV=argv;
+ MaxThread = MinThread = 1;
Tmalloc=scalable_malloc;
Trealloc=scalable_realloc;
Tcalloc=scalable_calloc;
@@ -165,12 +177,13 @@ int main(int argc, char* argv[])
ParseCommandLine( argC, argV );
limitMem( 500*MaxThread );
//-------------------------------------
- for( int p=MaxThread; p>=MinThread; --p ) {
+ for( int p=MaxThread; p>=MinThread; --p ) {
limitMem( 500*p );
- if( Verbose ) printf("testing with %d threads\n", p );
- NativeParallelFor( tbb::blocked_range<long>(0,p,1), RoundRobin(p) );
+ if( Verbose )
+ printf("testing with %d threads\n", p );
+ NativeParallelFor( p, RoundRobin(p, Verbose) );
}
- printf("done\n");
+ if( !error_occurred ) printf("done\n");
return 0;
}
@@ -196,21 +209,6 @@ struct TestStruct
};
-CMemTest::CMemTest()
-{
- time_t zzz;
- srand((UINT)time(&zzz));
- FullLog=false;
- rand();
-}
-CMemTest::CMemTest(bool verb)
-{
- time_t zzz;
- srand((UINT)time(&zzz));
- FullLog=verb;
- rand();
-}
-
void CMemTest::InvariantDataRealloc()
{
UINT size, sizeMin;
@@ -230,7 +228,7 @@ void CMemTest::InvariantDataRealloc()
if (pchar[k] != (UCHAR)k%255+1)
{
CountErrors++;
- if (FullLog)
+ if (ShouldReportError())
{
printf("stand '%c', must stand '%c'\n",pchar[k],(UCHAR)k%255+1);
printf("error: data changed (at %d, SizeMin=%d)\n",k,sizeMin);
@@ -240,6 +238,7 @@ void CMemTest::InvariantDataRealloc()
Trealloc(pchar,0);
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
//printf("end check\n");
}
void CMemTest::ReallocParam()
@@ -278,11 +277,12 @@ void CMemTest::ReallocParam()
else
{
CountErrors++;
- if (FullLog) printf("realloc error");
+ if (ShouldReportError()) printf("realloc error");
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
}
void CMemTest::AddrArifm()
@@ -320,12 +320,13 @@ void CMemTest::AddrArifm()
if ((uintptr_t)MasPointer[i]+MasCountElem[i] > (uintptr_t)MasPointer[i+1])
{
CountErrors++;
-// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
-// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ if (ShouldReportError()) printf("intersection detect at 0x%p between %d element(int) and 0x%p\n"
+ ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
//----------------------------------------------------------------
CountErrors=0;
if (FullLog) printf("realloc....");
@@ -355,12 +356,13 @@ void CMemTest::AddrArifm()
if ((uintptr_t)MasPointer[i]+MasCountElem[i] > (uintptr_t)MasPointer[i+1])
{
CountErrors++;
-// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
-// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ if (ShouldReportError()) printf("intersection detect at 0x%p between %d element(int) and 0x%p\n"
+ ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
for (int i=0; i<COUNT_ELEM; i++)
{
Tfree(MasPointer[i]);
@@ -394,12 +396,13 @@ void CMemTest::AddrArifm()
if ((uintptr_t)MasPointer[i]+MasCountElem[i] > (uintptr_t)MasPointer[i+1])
{
CountErrors++;
-// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
-// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ if (ShouldReportError()) printf("intersection detect at 0x%p between %d element(int) and 0x%p\n"
+ ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
for (int i=0; i<COUNT_ELEM; i++)
{
Tfree(MasPointer[i]);
@@ -422,17 +425,16 @@ void CMemTest::Zerofilling()
if (!TSMas->IzZero())
{
CountErrors++;
- if (FullLog) printf("detect nonzero element at TestStruct\n");
+ if (ShouldReportError()) printf("detect nonzero element at TestStruct\n");
}
}
Tfree(TSMas);
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
}
-
-
void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
{
std::vector<MemStruct> PointerList;
@@ -494,21 +496,27 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
for (int j=0; j<COUNT_TESTS; j++)
{
Size=rand()%(MaxSize-MinSize)+MinSize;
- errno = 0;
+ errno = ENOMEM+j+1;
tmp=Tmalloc(Size);
if (tmp == NULL)
{
CountNULL++;
if (errno != ENOMEM) {
CountErrors++;
- if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ if (ShouldReportError()) printf("NULL returned, error: errno != ENOMEM\n");
}
}
else
{
- if (errno != 0) {
+ // Technically, if malloc returns a non-NULL pointer, it is allowed to set errno anyway.
+ // However, on most systems it does not set errno.
+ bool known_issue = false;
+#if __linux__
+ if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+ if (errno != ENOMEM+j+1 && !known_issue) {
CountErrors++;
- if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ if (ShouldReportError()) printf("error: errno changed to %d though valid pointer was returned\n", errno);
}
zer=(BYTE*)tmp;
for (UINT k=0; k<Size; k++)
@@ -522,6 +530,8 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
if (FullLog) printf("end malloc\n");
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
+
CountErrors=0;
//calloc
if (FullLog) printf("calloc....");
@@ -530,21 +540,27 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
for (int j=0; j<COUNT_TESTS; j++)
{
Size=rand()%(MaxSize-MinSize)+MinSize;
- errno = 0;
- tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);
+ errno = ENOMEM+j+1;
+ tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);
if (tmp == NULL)
{
CountNULL++;
if (errno != ENOMEM) {
CountErrors++;
- if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ if (ShouldReportError()) printf("NULL returned, error: errno != ENOMEM\n");
}
}
else
{
- if (errno != 0) {
+ // Technically, if calloc returns a non-NULL pointer, it is allowed to set errno anyway.
+ // However, on most systems it does not set errno.
+ bool known_issue = false;
+#if __linux__
+ if( errno==ENOMEM ) known_issue = true;
+#endif /* __linux__ */
+ if (errno != ENOMEM+j+1 && !known_issue) {
CountErrors++;
- if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ if (ShouldReportError()) printf("error: errno changed to %d though valid pointer was returned\n", errno);
}
MStruct.Pointer=tmp;
MStruct.Size=Size;
@@ -555,6 +571,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
if (FullLog) printf("end calloc\n");
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
CountErrors=0;
if (FullLog) printf("realloc....");
CountNULL = 0;
@@ -567,7 +584,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
{
if (errno != 0) {
CountErrors++;
- if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ if (ShouldReportError()) printf("valid pointer returned, error: errno not kept\n");
}
PointerList[i].Size *= 2;
}
@@ -575,7 +592,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
{
if (errno != 0) {
CountErrors++;
- if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ if (ShouldReportError()) printf("valid pointer returned, error: errno not kept\n");
}
PointerList[i].Pointer = tmp;
PointerList[i].Size *= 2;
@@ -586,7 +603,7 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
if (errno != ENOMEM)
{
CountErrors++;
- if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ if (ShouldReportError()) printf("NULL returned, error: errno != ENOMEM\n");
}
// check data integrity
zer=(BYTE*)PointerList[i].Pointer;
@@ -594,13 +611,14 @@ void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
if (zer[k] != 0)
{
CountErrors++;
- if (FullLog) printf("NULL returned, error: data changed\n");
+ if (ShouldReportError()) printf("NULL returned, error: data changed\n");
}
}
}
if (FullLog) printf("realloc end\n");
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
for (UINT i=0; i<PointerList.size(); i++)
{
Tfree(PointerList[i].Pointer);
@@ -632,13 +650,14 @@ void CMemTest::UniquePointer()
if (*(*(MasPointer+i)+j)!=0)
{
CountErrors++;
-// if (FullLog) printf("error, detect 1 with 0x%x\n",(*(MasPointer+i)+j));
+ if (ShouldReportError()) printf("error, detect 1 with 0x%p\n",(*(MasPointer+i)+j));
}
*(*(MasPointer+i)+j)+=1;
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
//----------------------------------------------------------
//calloc
for (int i=0; i<COUNT_ELEM; i++)
@@ -656,13 +675,14 @@ void CMemTest::UniquePointer()
if (*(*(MasPointer+i)+j)!=0)
{
CountErrors++;
-// if (FullLog) printf("error, detect 1 with 0x%x\n",(*(MasPointer+i)+j));
+ if (ShouldReportError()) printf("error, detect 1 with 0x%p\n",(*(MasPointer+i)+j));
}
*(*(MasPointer+i)+j)+=1;
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
//---------------------------------------------------------
//realloc
CountErrors=0;
@@ -687,10 +707,23 @@ void CMemTest::UniquePointer()
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
for (int i=0; i<COUNT_ELEM; i++)
Tfree(MasPointer[i]);
}
+bool CMemTest::ShouldReportError()
+{
+ if (FullLog)
+ return true;
+ else
+ if (firstTime) {
+ firstTime = false;
+ return true;
+ } else
+ return false;
+}
+
void CMemTest::Free_NULL()
{
CountErrors=0;
@@ -701,14 +734,15 @@ void CMemTest::Free_NULL()
if (errno != 0)
{
CountErrors++;
- if (FullLog) printf("error is found by a call free with parameter NULL\n");
+ if (ShouldReportError()) printf("error is found by a call free with parameter NULL\n");
}
}
if (CountErrors) printf("%s\n",strError);
else if (FullLog) printf("%s\n",strOk);
+ error_occurred |= ( CountErrors>0 ) ;
}
-void CMemTest::RunAllTests()
+void CMemTest::RunAllTests(int /*id*/)
{
Zerofilling();
Free_NULL();
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
index 9bc71ad..5cbc56a 100644
--- a/src/test/test_malloc_pure_c.c
+++ b/src/test/test_malloc_pure_c.c
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -74,6 +74,7 @@ int main(void)
p1 = scalable_realloc(p2, i);
p2 = scalable_malloc(i);
}
+ scalable_free(p1);
scalable_free(p2);
printf("done\n");
return 0;
diff --git a/src/test/test_malloc_regression.cpp b/src/test/test_malloc_regression.cpp
new file mode 100644
index 0000000..a92cadd
--- /dev/null
+++ b/src/test/test_malloc_regression.cpp
@@ -0,0 +1,109 @@
+/*
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#define __TBB_NO_IMPLICIT_LINKAGE 1
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+
+#include <stdio.h>
+#include "tbb/scalable_allocator.h"
+
+class minimalAllocFree {
+public:
+ void operator()(int size) const {
+ tbb::scalable_allocator<char> a;
+ char* str = a.allocate( size );
+ a.deallocate( str, size );
+ }
+};
+
+#include "harness.h"
+
+template<typename Body, typename Arg>
+void RunThread(const Body& body, const Arg& arg) {
+ NativeParallelForTask<Arg,Body> job(arg, body);
+ job.start();
+ job.wait_to_finish();
+}
+
+#include "harness_memory.h"
+
+// The regression test for bug #1518 where thread boot strap allocations "leaked"
+bool test_bootstrap_leak(void) {
+ // Check whether memory usage data can be obtained; if not, skip the test.
+ if( !GetMemoryUsage() )
+ return true;
+
+ /* In the bug 1518, each thread leaked ~384 bytes.
+ Initially, scalable allocator maps 1MB. Thus it is necessary to take out most of this space.
+ 1MB is chunked into 16K blocks; of those, one block is for thread boot strap, and one more
+ should be reserved for the test body. 62 blocks left, each can serve 15 objects of 1024 bytes.
+ */
+ const int alloc_size = 1024;
+ const int take_out_count = 15*62;
+
+ tbb::scalable_allocator<char> a;
+ char* array[take_out_count];
+ for( int i=0; i<take_out_count; ++i )
+ array[i] = a.allocate( alloc_size );
+
+ RunThread( minimalAllocFree(), alloc_size ); // for threading library to take some memory
+ size_t memory_in_use = GetMemoryUsage();
+ // Wait for memory usage data to "stabilize". The test number (1000) has nothing underneath.
+ for( int i=0; i<1000; i++) {
+ if( GetMemoryUsage()!=memory_in_use ) {
+ memory_in_use = GetMemoryUsage();
+ i = -1;
+ }
+ }
+
+ // Notice that 16K boot strap memory block is enough to serve 42 threads.
+ const int num_thread_runs = 200;
+ for( int i=0; i<num_thread_runs; ++i )
+ RunThread( minimalAllocFree(), alloc_size );
+
+ ptrdiff_t memory_leak = GetMemoryUsage() - memory_in_use;
+ if( memory_leak>0 ) { // possibly too strong?
+ printf( "Error: memory leak of up to %ld bytes\n", static_cast<long>(memory_leak));
+ }
+
+ for( int i=0; i<take_out_count; ++i )
+ a.deallocate( array[i], alloc_size );
+
+ return memory_leak<=0;
+}
+
+int main( int /*argc*/, char* argv[] ) {
+ bool passed = true;
+
+ passed &= test_bootstrap_leak();
+
+ if(passed) printf("done\n");
+ else printf("%s failed\n", argv[0]);
+
+ return passed?0:1;
+}
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
index 1fde28b..e28ded0 100644
--- a/src/test/test_model_plugin.cpp
+++ b/src/test/test_model_plugin.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -87,12 +87,13 @@ void plugin_call(int maxthread)
CModel model;
model.init_and_terminate(maxthread);
} catch( std::runtime_error& error ) {
- fprintf(stderr, "ERROR: %s\n", error.what());
+ printf("ERROR: %s\n", error.what());
}
}
#else /* _USRDLL undefined */
+#define HARNESS_NO_ASSERT 1
#include "harness.h"
extern "C" void plugin_call(int);
@@ -111,9 +112,7 @@ void report_error_in(const char* function_name)
char* message = (char*)dlerror();
int code = 0;
#endif
- fprintf(stderr,
- "%s failed with error %d: %s\n",
- function_name, code, message);
+ printf( "%s failed with error %d: %s\n", function_name, code, message);
#if _WIN32 || _WIN64
LocalFree(message);
@@ -135,9 +134,13 @@ int use_lot_of_tls() {
#else
pthread_key_t last_handles[10];
pthread_key_t result;
- while( pthread_key_create(&result, NULL)==0 ) {
+ int setspecific_dummy=10;
+ while( pthread_key_create(&result, NULL)==0
+ && count < 4096 ) // Sun Solaris doesn't have any built-in limit, so we set something big enough
+ {
last_handles[++count%10] = result;
if(Verbose) printf("%d\n", count);
+ pthread_setspecific(result,&setspecific_dummy);
}
for( int i=0; i<10; ++i )
pthread_key_delete(last_handles[i]);
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
index 6a1851e..f05ddfc 100644
--- a/src/test/test_mutex.cpp
+++ b/src/test/test_mutex.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -41,17 +41,24 @@
#include "tbb/queuing_mutex.h"
#include "tbb/mutex.h"
#include "tbb/recursive_mutex.h"
+#include "tbb/null_mutex.h"
+#include "tbb/null_rw_mutex.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
#include "tbb/tick_count.h"
#include "tbb/atomic.h"
#include "harness.h"
+#include "harness_trace.h"
#include <cstdlib>
#include <cstdio>
#if _OPENMP
#include "test/OpenMP_Mutex.h"
#endif /* _OPENMP */
+#include "tbb/tbb_profiling.h"
+#ifndef TBBTEST_LOW_WORKLOAD
+ #define TBBTEST_LOW_WORKLOAD TBB_USE_THREADING_TOOLS
+#endif
// This test deliberately avoids a "using tbb" statement,
// so that the error of putting types in the wrong namespace will be caught.
@@ -65,7 +72,7 @@ struct Counter {
//! Function object for use with parallel_for.h.
template<typename C>
-struct AddOne {
+struct AddOne: NoAssign {
C& counter;
/** Increments counter once for each iteration in the iteration space. */
void operator()( tbb::blocked_range<size_t>& range ) const {
@@ -90,20 +97,21 @@ struct AddOne {
/** Does not test features specific to reader-writer locks. */
template<typename M>
void Test( const char * name ) {
- if( Verbose ) {
- printf("%s time = ",name);
- fflush(stdout);
- }
+ TRACE("%s time = ",name);
Counter<M> counter;
counter.value = 0;
+#if __TBB_NAMING_API_SUPPORT
+ tbb::profiling::set_name(counter.mutex, name);
+#endif /* __TBB_NAMING_API_SUPPORT */
+#if TBBTEST_LOW_WORKLOAD
+ const int n = 10000;
+#else
const int n = 100000;
+#endif /* TBBTEST_LOW_WORKLOAD */
tbb::tick_count t0 = tbb::tick_count::now();
- tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10000),AddOne<Counter<M> >(counter));
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/10),AddOne<Counter<M> >(counter));
tbb::tick_count t1 = tbb::tick_count::now();
- if( Verbose ) {
- printf("%g usec\n",(t1-t0).seconds());
- fflush(stdout);
- }
+ TRACE("%g usec\n",(t1-t0).seconds());
if( counter.value!=n )
std::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
}
@@ -118,9 +126,12 @@ struct Invariant {
Invariant( const char* mutex_name_ ) :
mutex_name(mutex_name_)
{
- single_value = 0;
+ single_value = 0;
for( size_t k=0; k<N; ++k )
value[k] = 0;
+#if __TBB_NAMING_API_SUPPORT
+ tbb::profiling::set_name(mutex, mutex_name_);
+#endif /* __TBB_NAMING_API_SUPPORT */
}
void update() {
for( size_t k=0; k<N; ++k )
@@ -142,7 +153,7 @@ struct Invariant {
//! Function object for use with parallel_for.h.
template<typename I>
-struct TwiddleInvariant {
+struct TwiddleInvariant: NoAssign {
I& invariant;
/** Increments counter once for each iteration in the iteration space. */
void operator()( tbb::blocked_range<size_t>& range ) const {
@@ -213,25 +224,29 @@ struct TwiddleInvariant {
/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
template<typename M>
void TestReaderWriterLock( const char * mutex_name ) {
- if( Verbose ) {
- printf("%s readers & writers time = ",mutex_name);
- fflush(stdout);
- }
+ TRACE( "%s readers & writers time = ", mutex_name );
Invariant<M,8> invariant(mutex_name);
+#if TBBTEST_LOW_WORKLOAD
+ const size_t n = 10000;
+#else
const size_t n = 500000;
+#endif /* TBBTEST_LOW_WORKLOAD */
tbb::tick_count t0 = tbb::tick_count::now();
- tbb::parallel_for(tbb::blocked_range<size_t>(0,n,5000),TwiddleInvariant<Invariant<M,8> >(invariant));
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,n/100),TwiddleInvariant<Invariant<M,8> >(invariant));
tbb::tick_count t1 = tbb::tick_count::now();
// There is either a writer or a reader upgraded to a writer for each 4th iteration
long expected_value = n/4;
if( !invariant.value_is(expected_value) )
std::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
- if( Verbose ) {
- printf("%g usec\n",(t1-t0).seconds());
- fflush(stdout);
- }
+ TRACE( "%g usec\n", (t1-t0).seconds() );
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress "conditional expression is constant" warning.
+ #pragma warning( push )
+ #pragma warning( disable: 4127 )
+#endif
+
/** Test try_acquire_reader functionality of a non-reenterable reader-writer mutex */
template<typename M>
void TestTryAcquireReader_OneThread( const char * mutex_name ) {
@@ -242,15 +257,15 @@ void TestTryAcquireReader_OneThread( const char * mutex_name ) {
lock1.release();
else
std::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
- {
+ {
typename M::scoped_lock lock2(tested_mutex, false);
if( lock1.try_acquire(tested_mutex) )
std::printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
- lock2.release();
- lock2.acquire(tested_mutex, true);
+ lock2.release();
+ lock2.acquire(tested_mutex, true);
if( lock1.try_acquire(tested_mutex, false) )
std::printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
- }
+ }
if( lock1.try_acquire(tested_mutex, false) )
lock1.release();
else
@@ -287,6 +302,9 @@ void TestTryAcquire_OneThread( const char * mutex_name ) {
std::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif
const int RecurN = 4;
int RecurArray[ RecurN ];
@@ -349,20 +367,95 @@ struct RecursiveAcquisition {
}
};
-/** Thie test is generic so that we may test other kinds of recursive mutexes.*/
+/** This test is generic so that we may test other kinds of recursive mutexes.*/
template<typename M>
void TestRecursiveMutex( const char * mutex_name )
{
+#if __TBB_NAMING_API_SUPPORT
+ for ( int i = 0; i < RecurN; ++i ) {
+ tbb::profiling::set_name(RecurMutex[i], mutex_name);
+ }
+#endif /* __TBB_NAMING_API_SUPPORT */
tbb::tick_count t0 = tbb::tick_count::now();
tbb::parallel_for(tbb::blocked_range<size_t>(0,10000,500), RecursiveAcquisition());
tbb::tick_count t1 = tbb::tick_count::now();
+ TRACE( "%s recursive mutex time = %g usec\n", mutex_name, (t1-t0).seconds() );
+}
- if( Verbose ) {
- printf("%s recursive mutex time = %g usec\n",
- mutex_name, (t1-t0).seconds());
+template<typename C>
+struct NullRecursive: NoAssign {
+ void recurse_till( size_t i, size_t till ) const {
+ if( i==till ) {
+ counter.value = counter.value+1;
+ return;
+ }
+ if( i&1 ) {
+ typename C::mutex_type::scoped_lock lock2(counter.mutex);
+ recurse_till( i+1, till );
+ lock2.release();
+ } else {
+ typename C::mutex_type::scoped_lock lock2;
+ lock2.acquire(counter.mutex);
+ recurse_till( i+1, till );
+ }
+ }
+
+ void operator()( tbb::blocked_range<size_t>& range ) const {
+ typename C::mutex_type::scoped_lock lock(counter.mutex);
+ recurse_till( range.begin(), range.end() );
+ }
+ NullRecursive( C& counter_ ) : counter(counter_) {
+ ASSERT( C::mutex_type::is_recursive_mutex, "Null mutex should be a recursive mutex." );
}
+ C& counter;
+};
+
+template<typename M>
+struct NullUpgradeDowngrade: NoAssign {
+ void operator()( tbb::blocked_range<size_t>& range ) const {
+ typename M::scoped_lock lock2;
+ for( size_t i=range.begin(); i!=range.end(); ++i ) {
+ if( i&1 ) {
+ typename M::scoped_lock lock1(my_mutex, true) ;
+ if( lock1.downgrade_to_reader()==false )
+ std::printf("ERROR for %s: downgrade should always succeed\n", name);
+ } else {
+ lock2.acquire( my_mutex, false );
+ if( lock2.upgrade_to_writer()==false )
+ std::printf("ERROR for %s: upgrade should always succeed\n", name);
+ lock2.release();
+ }
+ }
+ }
+
+ NullUpgradeDowngrade( M& m_, const char* n_ ) : my_mutex(m_), name(n_) {}
+ M& my_mutex;
+ const char* name;
+} ;
+
+template<typename M>
+void TestNullMutex( const char * name ) {
+ Counter<M> counter;
+ counter.value = 0;
+ const int n = 100;
+ if( Verbose ) printf("%s ",name);
+ {
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),AddOne<Counter<M> >(counter));
+ }
+ counter.value = 0;
+ {
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullRecursive<Counter<M> >(counter));
+ }
+
}
+template<typename M>
+void TestNullRWMutex( const char * name ) {
+ if( Verbose ) printf("%s ",name);
+ const int n = 100;
+ M m;
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10),NullUpgradeDowngrade<M>(m, name));
+}
#include "tbb/task_scheduler_init.h"
@@ -372,10 +465,19 @@ int main( int argc, char * argv[] ) {
ParseCommandLine( argc, argv );
for( int p=MinThread; p<=MaxThread; ++p ) {
tbb::task_scheduler_init init( p );
- if( Verbose )
- printf( "testing with %d workers\n", static_cast<int>(p) );
- // Run each test 3 times.
- for( int i=0; i<3; ++i ) {
+ TRACE( "testing with %d workers\n", static_cast<int>(p) );
+#if TBBTEST_LOW_WORKLOAD
+ // The amount of work is decreased in this mode to bring the length
+ // of the runs under tools into the tolerable limits.
+ const int n = 1;
+#else
+ const int n = 3;
+#endif
+ // Run each test several times.
+ for( int i=0; i<n; ++i ) {
+ TestNullMutex<tbb::null_mutex>( "Null Mutex" );
+ TestNullMutex<tbb::null_rw_mutex>( "Null RW Mutex" );
+ TestNullRWMutex<tbb::null_rw_mutex>( "Null RW Mutex" );
Test<tbb::spin_mutex>( "Spin Mutex" );
#if _OPENMP
Test<OpenMP_Mutex>( "OpenMP_Mutex" );
@@ -385,7 +487,7 @@ int main( int argc, char * argv[] ) {
Test<tbb::recursive_mutex>( "Recursive Mutex" );
Test<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
-
+
TestTryAcquire_OneThread<tbb::spin_mutex>("Spin Mutex");
TestTryAcquire_OneThread<tbb::queuing_mutex>("Queuing Mutex");
#if USE_PTHREAD
@@ -403,8 +505,7 @@ int main( int argc, char * argv[] ) {
TestRecursiveMutex<tbb::recursive_mutex>( "Recursive Mutex" );
}
- if( Verbose )
- printf( "calling destructor for task_scheduler_init\n" );
+ TRACE( "calling destructor for task_scheduler_init\n" );
}
std::printf("done\n");
return 0;
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
index 663622d..dc75bc5 100644
--- a/src/test/test_mutex_native_threads.cpp
+++ b/src/test/test_mutex_native_threads.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,12 +26,6 @@
the GNU General Public License.
*/
-#include "harness.h"
-#include <cstdio>
-
-#if USE_PTHREAD
-
-#include <cstdlib>
#include "tbb/spin_mutex.h"
#include "tbb/queuing_mutex.h"
#include "tbb/queuing_rw_mutex.h"
@@ -39,6 +33,7 @@
#include "tbb/tick_count.h"
#include "tbb/atomic.h"
+#include "harness.h"
// This test deliberately avoids a "using tbb" statement,
// so that the error of putting types in the wrong namespace will be caught.
@@ -47,27 +42,28 @@ template<typename M>
struct Counter {
typedef M mutex_type;
M mutex;
- volatile long value;
+ volatile long value;
+ void flog_once( size_t mode );
};
-template<typename C>
-void AddOne (C& counter, size_t mode)
+template<typename M>
+void Counter<M>::flog_once(size_t mode)
/** Increments counter once for each iteration in the iteration space. */
{
if( mode&1 ) {
// Try implicit acquire and explicit release
- typename C::mutex_type::scoped_lock lock(counter.mutex);
- counter.value = counter.value+1;
+ typename mutex_type::scoped_lock lock(mutex);
+ value = value+1;
lock.release();
} else {
// Try explicit acquire and implicit release
- typename C::mutex_type::scoped_lock lock;
- lock.acquire(counter.mutex);
- counter.value = counter.value+1;
+ typename mutex_type::scoped_lock lock;
+ lock.acquire(mutex);
+ value = value+1;
}
}
-template<typename M, size_t N>
+template<typename M, long N>
struct Invariant {
typedef M mutex_type;
M mutex;
@@ -78,20 +74,18 @@ struct Invariant {
mutex_name(mutex_name_)
{
single_value = 0;
- for( size_t k=0; k<N; ++k )
+ for( long k=0; k<N; ++k )
value[k] = 0;
}
void update() {
- for( size_t k=0; k<N; ++k )
+ for( long k=0; k<N; ++k )
++value[k];
}
bool value_is( long expected_value ) const {
long tmp;
- for( size_t k=0; k<N; ++k )
-// if( value[k]!=expected_value )
-// return false;
+ for( long k=0; k<N; ++k )
if( (tmp=value[k])!=expected_value ) {
- printf("ATTN! %ld!=%ld\n", tmp, expected_value);
+ printf("ERROR: %ld!=%ld\n", tmp, expected_value);
return false;
}
return true;
@@ -99,10 +93,11 @@ struct Invariant {
bool is_okay() {
return value_is( value[0] );
}
+ void flog_once( size_t mode );
};
-template<typename I>
-void TwiddleInvariant( I& invariant, size_t mode )
+template<typename M, long N>
+void Invariant<M,N>::flog_once( size_t mode )
{
//! Every 8th access is a write access
bool write = (mode%8)==7;
@@ -110,168 +105,127 @@ void TwiddleInvariant( I& invariant, size_t mode )
bool lock_kept = true;
if( (mode/8)&1 ) {
// Try implicit acquire and explicit release
- typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
+ typename mutex_type::scoped_lock lock(mutex,write);
if( write ) {
- long my_value = invariant.value[0];
- invariant.update();
+ long my_value = value[0];
+ update();
if( mode%16==7 ) {
lock_kept = lock.downgrade_to_reader();
if( !lock_kept )
- my_value = invariant.value[0] - 1;
- okay = invariant.value_is(my_value+1);
+ my_value = value[0] - 1;
+ okay = value_is(my_value+1);
}
} else {
- okay = invariant.is_okay();
+ okay = is_okay();
if( mode%8==3 ) {
- long my_value = invariant.value[0];
+ long my_value = value[0];
lock_kept = lock.upgrade_to_writer();
if( !lock_kept )
- my_value = invariant.value[0];
- invariant.update();
- okay = invariant.value_is(my_value+1);
+ my_value = value[0];
+ update();
+ okay = value_is(my_value+1);
}
}
lock.release();
} else {
// Try explicit acquire and implicit release
- typename I::mutex_type::scoped_lock lock;
- lock.acquire(invariant.mutex,write);
+ typename mutex_type::scoped_lock lock;
+ lock.acquire(mutex,write);
if( write ) {
- long my_value = invariant.value[0];
- invariant.update();
+ long my_value = value[0];
+ update();
if( mode%16==7 ) {
lock_kept = lock.downgrade_to_reader();
if( !lock_kept )
- my_value = invariant.value[0] - 1;
- okay = invariant.value_is(my_value+1);
+ my_value = value[0] - 1;
+ okay = value_is(my_value+1);
}
} else {
- okay = invariant.is_okay();
+ okay = is_okay();
if( mode%8==3 ) {
- long my_value = invariant.value[0];
+ long my_value = value[0];
lock_kept = lock.upgrade_to_writer();
if( !lock_kept )
- my_value = invariant.value[0];
- invariant.update();
- okay = invariant.value_is(my_value+1);
+ my_value = value[0];
+ update();
+ okay = value_is(my_value+1);
}
}
}
if( !okay ) {
- std::printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(mode),
- write?"write,":"read,", write?(mode%16==7?"downgrade,":""):(mode%8==3?"upgrade,":""),
- lock_kept?"lock kept,":"lock not kept,", (mode/8)&1?"imp/exp":"exp/imp" );
+ printf( "ERROR for %s at %ld: %s %s %s %s\n",mutex_name, long(mode),
+ write?"write,":"read,", write?(mode%16==7?"downgrade,":""):(mode%8==3?"upgrade,":""),
+ lock_kept?"lock kept,":"lock not kept,", (mode/8)&1?"imp/exp":"exp/imp" );
}
}
-template<typename M>
-class Work
-{
-public:
- static tbb::atomic<size_t> order;
- static const long mutex_test_size;
- static const long readwrite_test_size;
- static const long chunk;
-
- static void* mutex_work(void* p)
- {
- Counter<M>* pCounter = reinterpret_cast<Counter<M>*>(p);
- long step, i;
- while( (step=order.fetch_and_add<tbb::acquire>(chunk))<mutex_test_size ){
- for( i=0; i<chunk && step<mutex_test_size; ++i, ++step ) {
- AddOne(*pCounter, step);
- }
- }
- return NULL;
- }
-
- static void* readwrite_work(void* p)
- {
- Invariant<M,8>* pInv = reinterpret_cast<Invariant<M,8>*>(p);
- long step, i;
- while( (step=order.fetch_and_add<tbb::acquire>(chunk))<readwrite_test_size ){
- for( i=0; i<chunk && step<readwrite_test_size; ++i, ++step ) {
- TwiddleInvariant(*pInv, step);
- }
- }
- return NULL;
+static tbb::atomic<size_t> Order;
+
+template<typename State, long TestSize>
+struct Work: NoAssign {
+ static const size_t chunk = 100;
+ State& state;
+ Work( State& state_ ) : state(state_) {}
+ void operator()( int ) const {
+ size_t step;
+ while( (step=Order.fetch_and_add<tbb::acquire>(chunk))<TestSize )
+ for( size_t i=0; i<chunk && step<TestSize; ++i, ++step )
+ state.flog_once(step);
}
};
-template<typename M> tbb::atomic<size_t> Work<M>::order;
-template<typename M> const long Work<M>::mutex_test_size = 100000;
-template<typename M> const long Work<M>::readwrite_test_size = 1000000;
-template<typename M> const long Work<M>::chunk = 100;
-
-typedef void* thread_func( void* );
-
-//! Generic test of a TBB mutex type M.
+//! Generic test of a TBB Mutex type M.
/** Does not test features specific to reader-writer locks. */
template<typename M>
-void Test( const char * name ) {
+void Test( const char * name, int nthread ) {
if( Verbose )
printf("testing %s\n",name);
Counter<M> counter;
counter.value = 0;
- Work<M>::order = 0;
- thread_func* mutex = reinterpret_cast<thread_func*>(&(Work<M>::mutex_work));
- pthread_t* thr = new pthread_t[NThread];
-
+ Order = 0;
+ const long test_size = 100000;
tbb::tick_count t0 = tbb::tick_count::now();
- for (int i=0; i<NThread; ++i)
- pthread_create(thr+i, NULL, mutex, reinterpret_cast<void*>(&counter));
- for (int i=0; i<NThread; ++i)
- pthread_join(*(thr+i), NULL);
+ NativeParallelFor( nthread, Work<Counter<M>, test_size>(counter) );
tbb::tick_count t1 = tbb::tick_count::now();
+
if( Verbose )
printf("%s time = %g usec\n",name, (t1-t0).seconds() );
- if( counter.value!=Work<M>::mutex_test_size )
- std::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
- delete[] thr;
+ if( counter.value!=test_size )
+ printf("ERROR for %s: counter.value=%ld != %ld=test_size\n",name,counter.value,test_size);
}
-/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
+//! Generic test of TBB ReaderWriterMutex type M
template<typename M>
-void TestReaderWriterLock( const char * mutex_name ) {
+void TestReaderWriter( const char * mutex_name, int nthread ) {
if( Verbose )
printf("testing %s\n",mutex_name);
Invariant<M,8> invariant(mutex_name);
- Work<M>::order = 0;
- thread_func* readwrite = reinterpret_cast<thread_func*>(Work<M>::readwrite_work);
- pthread_t* thr = new pthread_t[NThread];
+ Order = 0;
+ static const long test_size = 1000000;
tbb::tick_count t0 = tbb::tick_count::now();
- for (int i=0; i<NThread; ++i)
- pthread_create(thr+i, NULL, readwrite, reinterpret_cast<void*>(&invariant));
- for (int i=0; i<NThread; ++i)
- pthread_join(*(thr+i), NULL);
+ NativeParallelFor( nthread, Work<Invariant<M,8>, test_size>(invariant) );
tbb::tick_count t1 = tbb::tick_count::now();
// There is either a writer or a reader upgraded to a writer for each 4th iteration
- long expected_value = Work<M>::readwrite_test_size/4;
+ long expected_value = test_size/4;
if( !invariant.value_is(expected_value) )
- std::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
+ printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
if( Verbose )
printf("%s readers & writers time = %g usec\n",mutex_name,(t1-t0).seconds());
- delete[] thr;
}
-#endif /* USE_PTHREAD */
int main( int argc, char * argv[] ) {
ParseCommandLine( argc, argv );
-#if USE_PTHREAD
- if( Verbose )
- printf( "testing with %d threads\n", NThread );
- Test<tbb::spin_mutex>( "Spin Mutex" );
- Test<tbb::queuing_mutex>( "Queuing Mutex" );
- Test<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
- Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
- TestReaderWriterLock<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
- TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
- std::printf("done\n");
-#else
- if( Verbose )
- printf("this test need pthreads to work; define USE_PTHREAD before compilation.\n");
- printf("skip\n");
-#endif /* USE_PTHREAD */
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ if( Verbose )
+ printf( "testing with %d threads\n", p );
+ Test<tbb::spin_mutex>( "spin_mutex", p );
+ Test<tbb::queuing_mutex>( "queuing_mutex", p );
+ Test<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
+ Test<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
+ TestReaderWriter<tbb::queuing_rw_mutex>( "queuing_rw_mutex", p );
+ TestReaderWriter<tbb::spin_rw_mutex>( "spin_rw_mutex", p );
+ }
+ printf("done\n");
return 0;
}
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
index 884a1c5..5c85573 100644
--- a/src/test/test_openmp.cpp
+++ b/src/test/test_openmp.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -112,13 +112,19 @@ void SerialConvolve( T c[], const T a[], int m, const T b[], int n ) {
using namespace tbb;
-class InnerBody {
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress overzealous warning about short+=short
+ #pragma warning( push )
+ #pragma warning( disable: 4244 )
+#endif
+
+class InnerBody: NoAssign {
const T* my_a;
const T* my_b;
const int i;
public:
T sum;
- InnerBody( T c[], const T a[], const T b[], int i ) :
+ InnerBody( T /*c*/[], const T a[], const T b[], int i ) :
my_a(a), my_b(b), sum(0), i(i)
{}
InnerBody( InnerBody& x, split ) :
@@ -132,6 +138,10 @@ public:
}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif
+
//! Test OpenMMP loop around TBB loop
void OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {
if( Verbose )
@@ -150,7 +160,7 @@ void OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {
}
}
-class OuterBody {
+class OuterBody: NoAssign {
const T* my_a;
const T* my_b;
T* my_c;
@@ -198,8 +208,8 @@ int main( int argc, char* argv[] ) {
T b[N];
for( int m=1; m<=M; m*=17 ) {
for( int n=1; n<=M; n*=13 ) {
- for( int i=0; i<m; ++i ) a[i] = 1+i/5;
- for( int i=0; i<n; ++i ) b[i] = 1+i/7;
+ for( int i=0; i<m; ++i ) a[i] = T(1+i/5);
+ for( int i=0; i<n; ++i ) b[i] = T(1+i/7);
T expected[M+N];
SerialConvolve( expected, a, m, b, n );
task_scheduler_init init(p);
@@ -210,7 +220,9 @@ int main( int argc, char* argv[] ) {
case 0:
TBB_OpenMP_Convolve( actual, a, m, b, n );
break;
- case 1: OpenMP_TBB_Convolve( actual, a, m, b, n ); break;
+ case 1:
+ OpenMP_TBB_Convolve( actual, a, m, b, n );
+ break;
}
for( int i=0; i<m+n-1; ++i ) {
ASSERT( actual[i]==expected[i], NULL );
diff --git a/src/test/test_parallel_do.cpp b/src/test/test_parallel_do.cpp
index 7287a0f..8142fb2 100644
--- a/src/test/test_parallel_do.cpp
+++ b/src/test/test_parallel_do.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -221,7 +221,7 @@ void TestBody ( size_t depth ) {
}
template<class Iterator>
-void TestIterator_RvalueOnly ( int nthread, size_t depth ) {
+void TestIterator_RvalueOnly ( int /*nthread*/, size_t depth ) {
g_values_counter = 0;
TestBody<FakeTaskGeneratorBody, Iterator> (depth);
TestBody<FakeTaskGeneratorBody_ConstRefVersion, Iterator> (depth);
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
index 084527e..01b1e5f 100644
--- a/src/test/test_parallel_for.cpp
+++ b/src/test/test_parallel_for.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
index c2c4794..fb70727 100644
--- a/src/test/test_parallel_reduce.cpp
+++ b/src/test/test_parallel_reduce.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
index ac9894d..c70cedb 100644
--- a/src/test/test_parallel_scan.cpp
+++ b/src/test/test_parallel_scan.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -120,18 +120,18 @@ public:
self = this;
}
template<typename Tag>
- void operator()( const Range& r, Tag tag ) {
+ void operator()( const Range& r, Tag /*tag*/ ) {
Snooze(true);
#if PRINT_DEBUG
if( my_range.empty() )
- printf("%d computing %s [%ld..%ld)\n",id,tag.is_final_scan()?"final":"lookahead",r.begin(),r.end() );
+ printf("%d computing %s [%ld..%ld)\n",id,Tag::is_final_scan()?"final":"lookahead",r.begin(),r.end() );
else
- printf("%d computing %s [%ld..%ld) [%ld..%ld)\n",id,tag.is_final_scan()?"final":"lookahead",my_range.begin(),my_range.end(),r.begin(),r.end());
+ printf("%d computing %s [%ld..%ld) [%ld..%ld)\n",id,Tag::is_final_scan()?"final":"lookahead",my_range.begin(),my_range.end(),r.begin(),r.end());
#endif /* PRINT_DEBUG */
- ASSERT( !tag.is_final_scan() || (my_range.begin()==0 && my_range.end()==r.begin()) || (my_range.empty() && r.begin()==0), NULL );
+ ASSERT( !Tag::is_final_scan() || (my_range.begin()==0 && my_range.end()==r.begin()) || (my_range.empty() && r.begin()==0), NULL );
for( long i=r.begin(); i<r.end(); ++i ) {
my_total += my_array[i];
- if( tag.is_final_scan() ) {
+ if( Tag::is_final_scan() ) {
ASSERT( AddendHistory[i]<USED_FINAL, "addend used 'finally' twice?" );
AddendHistory[i] |= USED_FINAL;
my_sum[i] = my_total;
@@ -179,7 +179,8 @@ public:
static void VerifySum( long start_index, long finish_index, int sum, int line ) {
int expected = TriangularSum( finish_index ) - TriangularSum( start_index );
if( expected!=sum ) {
- printf("line %d: sum[%ld..%ld] should be = %d, but was computed as %d\n", line, start_index, finish_index, expected, sum );
+ printf( "line %d: sum[%ld..%ld] should be = %d, but was computed as %d\n",
+ line, start_index, finish_index, expected, sum );
abort();
}
}
diff --git a/src/test/test_parallel_sort.cpp b/src/test/test_parallel_sort.cpp
index 00d2ec0..70612aa 100644
--- a/src/test/test_parallel_sort.cpp
+++ b/src/test/test_parallel_sort.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -26,7 +26,8 @@
the GNU General Public License.
*/
-#include "harness_assert.h"
+#include "tbb/parallel_sort.h"
+
#include "harness.h"
#include <math.h>
#include <algorithm>
@@ -37,17 +38,15 @@
#include <exception>
#include "tbb/task_scheduler_init.h"
-#include "tbb/parallel_sort.h"
#include "tbb/concurrent_vector.h"
-/** Has tighly controlled interface so that we can verify
+/** Has tightly controlled interface so that we can verify
that parallel_sort uses only the required interface. */
class Minimal {
int val;
public:
Minimal() {}
void set_val(int i) { val = i; }
- int get_val(int i) { return val; }
static bool CompareWith (const Minimal &a, const Minimal &b) {
return (a.val < b.val);
}
@@ -402,7 +401,7 @@ bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter,
/*! Minimal, float and string types are used. All interfaces to parallel_sort that are usable
by each type are tested.
*/
-void Flog( int nthread ) {
+void Flog() {
// For eacg type create:
// the list to be sorted by parallel_sort (array)
// the list to be sort by STL sort (array_2)
@@ -515,7 +514,7 @@ int main( int argc, char* argv[] ) {
if( p>0 ) {
tbb::task_scheduler_init init( p );
current_p = p;
- Flog(p);
+ Flog();
// Test that all workers sleep when no work
TestCPUUserTime(p);
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
index 3d29a9e..7d91e37 100644
--- a/src/test/test_parallel_while.cpp
+++ b/src/test/test_parallel_while.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -27,7 +27,7 @@
*/
#include "tbb/parallel_while.h"
-#include "harness_assert.h"
+#include "harness.h"
const int N = 200;
@@ -75,7 +75,7 @@ public:
}
};
-class MatrixMultiplyBody {
+class MatrixMultiplyBody: NoAssign {
Element (*a)[N];
Element (*b)[N];
Element (*c)[N];
@@ -110,7 +110,6 @@ void WhileMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int
w.run( stream, body );
}
-#include "harness.h"
#include "tbb/tick_count.h"
#include <cstdlib>
#include <cstdio>
diff --git a/src/test/test_pipeline.cpp b/src/test/test_pipeline.cpp
index 82574e9..fdeed75 100644
--- a/src/test/test_pipeline.cpp
+++ b/src/test/test_pipeline.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -36,7 +36,8 @@ struct Buffer {
int id;
//! True if Buffer is in use.
bool is_busy;
- Buffer() : id(-1), is_busy(false) {}
+ int sequence_number;
+ Buffer() : id(-1), is_busy(false), sequence_number(-1) {}
};
class waiting_probe {
@@ -50,92 +51,99 @@ public:
void probe( ); // defined below
};
-static size_t InputCounter;
-static const size_t MaxStreamSize = 1<<12;
+static const int MaxStreamSize = 1<<12;
//! Maximum number of filters allowed
static const int MaxFilters = 5;
-static size_t StreamSize;
+static int StreamSize;
static const size_t MaxBuffer = 8;
static bool Done[MaxFilters][MaxStreamSize];
static waiting_probe WaitTest;
+static size_t out_of_order_count;
-class MyFilter: public tbb::filter {
+class BaseFilter: public tbb::filter {
bool* const my_done;
const bool my_is_last;
- const bool input_was_ordered;
+ bool my_is_running;
public:
- MyFilter( bool is_ordered, bool done[], bool is_last, bool first_stage_is_ordered ) :
- filter(is_ordered? tbb::filter::serial : tbb::filter::parallel) ,
+ tbb::atomic<int> current_token;
+ BaseFilter( tbb::filter::mode type, bool done[], bool is_last ) :
+ filter(type),
my_done(done),
my_is_last(is_last),
- input_was_ordered(first_stage_is_ordered)
+ my_is_running(false),
+ current_token()
{}
+ virtual Buffer* get_buffer( void* item ) {
+ current_token++;
+ return static_cast<Buffer*>(item);
+ }
/*override*/void* operator()( void* item ) {
- Buffer& b = *static_cast<Buffer*>(item);
- ASSERT( 0<=b.id && size_t(b.id)<StreamSize, NULL );
- ASSERT( !my_done[b.id], "duplicate processing of token?" );
- // The below assertion is no more kept if the first stage was parallel
- if( input_was_ordered )
- ASSERT( !is_serial() || b.id==0 || my_done[b.id-1], NULL );
- ASSERT( b.is_busy, NULL );
- my_done[b.id] = true;
- if( my_is_last ) {
- b.is_busy = false;
+ if( is_serial() )
+ ASSERT( !my_is_running, "premature entry to serial stage" );
+ my_is_running = true;
+ Buffer* b = get_buffer(item);
+ if( b ) {
+ if( is_ordered() ) {
+ if( b->sequence_number == -1 )
+ b->sequence_number = current_token-1;
+ else
+ ASSERT( b->sequence_number==current_token-1, "item arrived out of order" );
+ } else if( is_serial() ) {
+ if( b->sequence_number != current_token-1 && b->sequence_number != -1 )
+ out_of_order_count++;
+ }
+ ASSERT( 0<=b->id && b->id<StreamSize, NULL );
+ ASSERT( !my_done[b->id], "duplicate processing of token?" );
+ ASSERT( b->is_busy, NULL );
+ my_done[b->id] = true;
+ if( my_is_last ) {
+ b->id = -1;
+ b->sequence_number = -1;
+ __TBB_store_with_release(b->is_busy, false);
+ }
}
- return item;
+ my_is_running = false;
+ return b;
}
};
-
-class MyInput: public tbb::filter {
- const bool my_is_last;
- const size_t my_number_of_tokens;
- Buffer buffer[MaxBuffer];
+class InputFilter: public BaseFilter {
tbb::spin_mutex input_lock;
- bool my_is_running;
- /*override*/void* operator()( void* );
+ Buffer buffer[MaxBuffer];
+ const size_t my_number_of_tokens;
public:
- MyInput( bool is_ordered, size_t ntokens, bool is_last ) :
- tbb::filter(is_ordered),
- my_is_last(is_last),
- my_number_of_tokens(ntokens),
- my_is_running(false)
- {
- ASSERT( my_number_of_tokens<=MaxBuffer, NULL );
- }
-};
-
-void* MyInput::operator()(void*) {
- size_t next_input, free_buffer = 0;
- if( is_serial() )
- ASSERT( !my_is_running, "premature entry to serial input stage" );
- my_is_running = true;
- { // lock protected scope
- tbb::spin_mutex::scoped_lock lock(input_lock);
- if( InputCounter>=StreamSize ) {
- my_is_running = false;
- return NULL;
+ InputFilter( tbb::filter::mode type, size_t ntokens, bool done[], bool is_last ) :
+ BaseFilter(type, done, is_last),
+ my_number_of_tokens(ntokens)
+ {}
+ /*override*/Buffer* get_buffer( void* ) {
+ int next_input;
+ size_t free_buffer = 0;
+ { // lock protected scope
+ tbb::spin_mutex::scoped_lock lock(input_lock);
+ if( current_token>=StreamSize )
+ return NULL;
+ next_input = current_token++;
+ // once in a while, emulate waiting for input; this only makes sense for serial input
+ if( is_serial() && WaitTest.required() )
+ WaitTest.probe( );
+ while( free_buffer<MaxBuffer )
+ if( __TBB_load_with_acquire(buffer[free_buffer].is_busy) )
+ ++free_buffer;
+ else {
+ buffer[free_buffer].is_busy = true;
+ break;
+ }
}
- next_input = InputCounter++;
- // once in a while, emulate waiting for input; this only makes sense for serial input
- if( is_serial() && WaitTest.required() )
- WaitTest.probe( );
- while( free_buffer<MaxBuffer )
- if( buffer[free_buffer].is_busy )
- ++free_buffer;
- else {
- buffer[free_buffer].is_busy = true;
- break;
- }
+ ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
+ Buffer* b = &buffer[free_buffer];
+ ASSERT( &buffer[0] <= b, NULL );
+ ASSERT( b <= &buffer[MaxBuffer-1], NULL );
+ ASSERT( b->id == -1, NULL);
+ b->id = next_input;
+ ASSERT( b->sequence_number == -1, NULL);
+ return b;
}
- ASSERT( free_buffer<my_number_of_tokens, "premature reuse of buffer" );
- Buffer& b = buffer[free_buffer];
- ASSERT( &buffer[0] <= &b, NULL );
- ASSERT( &b <= &buffer[MaxBuffer-1], NULL );
- b.id = int(next_input);
- b.is_busy = !my_is_last;
- my_is_running = false;
- return &b;
-}
+};
//! The struct below repeats layout of tbb::pipeline.
struct hacked_pipeline {
@@ -151,10 +159,12 @@ struct hacked_pipeline {
//! The struct below repeats layout of tbb::internal::ordered_buffer.
struct hacked_ordered_buffer {
- tbb::task** array;
+ void* array; // This should be changed to task_info* if ever used
tbb::internal::Token array_size;
tbb::internal::Token low_token;
tbb::spin_mutex array_mutex;
+ tbb::internal::Token high_token;
+ bool is_ordered;
};
//! The struct below repeats layout of tbb::filter.
@@ -171,57 +181,63 @@ struct hacked_filter {
const tbb::internal::Token tokens_before_wraparound = 0xF;
void TestTrivialPipeline( size_t nthread, int number_of_filters ) {
+ // There are 3 filter types: parallel, serial_in_order and serial_out_of_order
+ static const tbb::filter::mode filter_table[] = { tbb::filter::parallel, tbb::filter::serial_in_order, tbb::filter::serial_out_of_order};
+ const int number_of_filter_types = int(sizeof(filter_table)/sizeof(filter_table[0]));
if( Verbose )
printf("testing with %d threads and %d filters\n", int(nthread), number_of_filters );
ASSERT( number_of_filters<=MaxFilters, "too many filters" );
ASSERT( sizeof(hacked_pipeline) == sizeof(tbb::pipeline), "layout changed for tbb::pipeline?" );
ASSERT( sizeof(hacked_filter) == sizeof(tbb::filter), "layout changed for tbb::filter?" );
size_t ntokens = nthread<MaxBuffer ? nthread : MaxBuffer;
- // Iterate over possible ordered/unordered filter sequences
- for( int bitmask=0; bitmask<1<<number_of_filters; ++bitmask ) {
+ // Count maximum iterations number
+ int limit = 1;
+ for( int i=0; i<number_of_filters; ++i)
+ limit *= number_of_filter_types;
+ // Iterate over possible filter sequences
+ for( int numeral=0; numeral<limit; ++numeral ) {
// Build pipeline
tbb::pipeline pipeline;
// A private member of pipeline is hacked there for sake of testing wrap-around immunity.
((hacked_pipeline*)(void*)&pipeline)->token_counter = ~tokens_before_wraparound;
tbb::filter* filter[MaxFilters];
- bool first_stage_is_ordered = false;
- for( int i=0; i<number_of_filters; ++i ) {
- const bool is_ordered = bitmask>>i&1;
+ int temp = numeral;
+ for( int i=0; i<number_of_filters; ++i, temp/=number_of_filter_types ) {
+ tbb::filter::mode filter_type = filter_table[temp%number_of_filter_types];
const bool is_last = i==number_of_filters-1;
- if( i==0 ) {
- filter[i] = new MyInput(is_ordered,ntokens,is_last);
- first_stage_is_ordered = is_ordered;
- }
+ if( i==0 )
+ filter[i] = new InputFilter(filter_type,ntokens,Done[i],is_last);
else
- filter[i] = new MyFilter(is_ordered,Done[i],is_last,first_stage_is_ordered);
+ filter[i] = new BaseFilter(filter_type,Done[i],is_last);
pipeline.add_filter(*filter[i]);
// The ordered buffer of serial filters is hacked as well.
- if (is_ordered)
+ if ( filter[i]->is_serial() ) {
((hacked_filter*)(void*)filter[i])->input_buffer->low_token = ~tokens_before_wraparound;
+ if ( !filter[i]->is_ordered() )
+ ((hacked_filter*)(void*)filter[i])->input_buffer->high_token = ~tokens_before_wraparound;
+ }
}
for( StreamSize=0; StreamSize<=MaxStreamSize; StreamSize += StreamSize/3+1 ) {
memset( Done, 0, sizeof(Done) );
- InputCounter = 0;
-
+ for( int i=0; i<number_of_filters; ++i ) {
+ static_cast<BaseFilter*>(filter[i])->current_token=0;
+ }
pipeline.run( ntokens );
-
- if( number_of_filters>0 )
- ASSERT( InputCounter==StreamSize, NULL );
- for( int i=1; i<MaxFilters; ++i )
- for( size_t j=0; j<StreamSize; ++j ) {
+ for( int i=0; i<number_of_filters; ++i )
+ ASSERT( static_cast<BaseFilter*>(filter[i])->current_token==StreamSize, NULL );
+ for( int i=0; i<MaxFilters; ++i )
+ for( int j=0; j<StreamSize; ++j ) {
ASSERT( Done[i][j]==(i<number_of_filters), NULL );
}
}
- pipeline.clear();
for( int i=number_of_filters; --i>=0; ) {
delete filter[i];
filter[i] = NULL;
}
+ pipeline.clear();
}
}
-#include "tbb/tick_count.h"
-#include "tbb/tbb_machine.h"
#include "harness_cpu.h"
static int nthread; // knowing number of threads is necessary to call TestCPUUserTime
@@ -239,6 +255,7 @@ void waiting_probe::probe( ) {
int main( int argc, char* argv[] ) {
// Default is at least one thread.
MinThread = 1;
+ out_of_order_count = 0;
ParseCommandLine(argc,argv);
if( MinThread<1 ) {
printf("must have at least one thread");
@@ -257,6 +274,8 @@ int main( int argc, char* argv[] ) {
// Test that all workers sleep when no work
TestCPUUserTime(nthread);
}
+ if( !out_of_order_count )
+ printf("Warning: out of order serial filter received tokens in order\n");
printf("done\n");
return 0;
}
diff --git a/src/test/test_rwm_upgrade_downgrade.cpp b/src/test/test_rwm_upgrade_downgrade.cpp
index d3ab30c..182329e 100644
--- a/src/test/test_rwm_upgrade_downgrade.cpp
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -29,26 +29,18 @@
#include "tbb/queuing_rw_mutex.h"
#include "tbb/spin_rw_mutex.h"
#include "harness.h"
-#include "tbb/blocked_range.h"
-
-#define USE_TBB_PFOR 1
-
-#if USE_TBB_PFOR
-#include "tbb/task.h"
-#include "tbb/parallel_for.h"
-#endif
using namespace tbb;
-volatile int Count = 0;
+volatile int Count;
template<typename RWMutex>
-struct Hammer {
- RWMutex &MutexProtectingCount;
+struct Hammer: NoAssign {
+ RWMutex &MutexProtectingCount;
mutable volatile int dummy;
Hammer(RWMutex &m): MutexProtectingCount(m) {}
- void operator()( const blocked_range<int>& range ) const {
+ void operator()( int /*thread_id*/ ) const {
for( int j=0; j<100000; ++j ) {
typename RWMutex::scoped_lock lock(MutexProtectingCount,false);
int c = Count;
@@ -56,7 +48,7 @@ struct Hammer {
++dummy;
}
if( lock.upgrade_to_writer() ) {
- // The upgrade suceeded without any intervening writers
+ // The upgrade succeeded without any intervening writers
ASSERT( c==Count, "another thread modified Count while I held a read lock" );
} else {
c = Count;
@@ -75,18 +67,14 @@ struct Hammer {
queuing_rw_mutex QRW_mutex;
spin_rw_mutex SRW_mutex;
-#include "tbb/task_scheduler_init.h"
-
int main( int argc, char* argv[]) {
ParseCommandLine( argc, argv );
-#if USE_TBB_PFOR
- task_scheduler_init init(NThread);
- parallel_for( blocked_range<int>( 0, NThread, 1 ), Hammer<queuing_rw_mutex>(QRW_mutex) ); Count = 0;
- parallel_for( blocked_range<int>( 0, NThread, 1 ), Hammer<spin_rw_mutex>(SRW_mutex) );
-#else
- NativeParallelFor( blocked_range<int>( 0, NThread, 1 ), Hammer<queuing_rw_mutex>(QRW_mutex) ); Count = 0;
- NativeParallelFor( blocked_range<int>( 0, NThread, 1 ), Hammer<spin_rw_mutex>(SRW_mutex) );
-#endif
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ Count = 0;
+ NativeParallelFor( p, Hammer<queuing_rw_mutex>(QRW_mutex) );
+ Count = 0;
+ NativeParallelFor( p, Hammer<spin_rw_mutex>(SRW_mutex) );
+ }
printf("done\n");
return 0;
}
diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp
index a3d7446..7639030 100644
--- a/src/test/test_task.cpp
+++ b/src/test/test_task.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -180,6 +180,7 @@ struct AffinityTask: public tbb::task {
// We exploit those conditions for sake of unit testing.
ASSERT( id!=expected_affinity_id, NULL );
ASSERT( !noted, "note_affinity_id called twice!" );
+ ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
noted = true;
}
};
@@ -210,6 +211,38 @@ void TestAffinity( int nthread ) {
t->destroy(*t);
}
+struct NoteAffinityTask: public tbb::task {
+ bool noted;
+ NoteAffinityTask( int id ) : noted(false)
+ {
+ set_affinity(tbb::task::affinity_id(id));
+ }
+ ~NoteAffinityTask () {
+ ASSERT (noted, "note_affinity has not been called");
+ }
+ /*override*/ tbb::task* execute() {
+ return NULL;
+ }
+ /*override*/ void note_affinity( affinity_id /*id*/ ) {
+ noted = true;
+ ASSERT ( &tbb::task::self() == (tbb::task*)this, "Wrong innermost running task" );
+ }
+};
+
+// This test checks one of the paths inside the scheduler by affinitizing the child task
+// to non-existent thread so that it is proxied in the local task pool but not retrieved
+// by another thread.
+void TestNoteAffinityContext() {
+ tbb::task_scheduler_init init(1);
+ tbb::empty_task* t = new( tbb::task::allocate_root() ) tbb::empty_task;
+ t->set_ref_count(2);
+ // This master in the absence of workers will have an affinity id of 1.
+ // So use another number to make the task get proxied.
+ t->spawn( *new(t->allocate_child()) NoteAffinityTask(2) );
+ t->wait_for_all();
+ t->destroy(*t);
+}
+
//------------------------------------------------------------------------
// Test that recovery actions work correctly for task::allocate_* methods
// when a task's constructor throws an exception.
@@ -220,6 +253,12 @@ static int TestUnconstructibleTaskCount;
struct ConstructionFailure {
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Suppress pointless "unreachable code" warning.
+ #pragma warning (push)
+ #pragma warning (disable: 4702)
+#endif
+
//! Task that cannot be constructed.
template<size_t N>
struct UnconstructibleTask: public tbb::empty_task {
@@ -229,11 +268,15 @@ struct UnconstructibleTask: public tbb::empty_task {
}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif
+
#define TRY_BAD_CONSTRUCTION(x) \
{ \
try { \
new(x) UnconstructibleTask<N>; \
- } catch( ConstructionFailure ) { \
+ } catch( const ConstructionFailure& ) { \
ASSERT( parent()==original_parent, NULL ); \
ASSERT( ref_count()==original_ref_count, "incorrectly changed ref_count" );\
++TestUnconstructibleTaskCount; \
@@ -267,6 +310,12 @@ void TestUnconstructibleTask() {
// Test for alignment problems with task objects.
//------------------------------------------------------------------------
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ // Workaround for pointless warning "structure was padded due to __declspec(align())
+ #pragma warning (push)
+ #pragma warning (disable: 4324)
+#endif
+
//! Task with members of type T.
/** The task recursively creates tasks. */
template<typename T>
@@ -287,6 +336,10 @@ public:
TaskWithMember( unsigned char n ) : count(n) {}
};
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+ #pragma warning (pop)
+#endif
+
template<typename T>
void TestAlignmentOfOneClass() {
typedef TaskWithMember<T> task_type;
@@ -333,7 +386,9 @@ int Fib( int n ) {
if( n<2 ) {
return n;
} else {
- int y;
+ // y actually does not need to be initialized. It is initialized solely to suppress
+ // a gratuitous warning "potentially uninitialized local variable".
+ int y=-1;
tbb::task* root_task = new( tbb::task::allocate_root() ) tbb::empty_task;
root_task->set_ref_count(2);
root_task->spawn( *new( root_task->allocate_child() ) RightFibTask(&y,n) );
@@ -345,6 +400,8 @@ int Fib( int n ) {
}
void TestLeftRecursion( int p ) {
+ if( Verbose )
+ printf("testing non-spawned roots for %d threads\n",p);
tbb::task_scheduler_init init(p);
int sum = 0;
for( int i=0; i<100; ++i )
@@ -354,12 +411,12 @@ void TestLeftRecursion( int p ) {
//------------------------------------------------------------------------
int main(int argc, char* argv[]) {
- srand(2);
MinThread = 1;
ParseCommandLine( argc, argv );
TestUnconstructibleTask<1>();
TestUnconstructibleTask<10000>();
TestAlignment();
+ TestNoteAffinityContext();
for( int p=MinThread; p<=MaxThread; ++p ) {
TestSpawnChildren( p );
TestSpawnRootList( p );
diff --git a/src/test/test_task_assertions.cpp b/src/test/test_task_assertions.cpp
index 496cabb..34af7a7 100644
--- a/src/test/test_task_assertions.cpp
+++ b/src/test/test_task_assertions.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -35,7 +35,7 @@
// Test that important assertions in class task fail as expected.
//------------------------------------------------------------------------
-#include "tbb/blocked_range.h"
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
#include "harness.h"
#include "harness_bad_expr.h"
@@ -47,7 +47,7 @@ int AbuseOneTaskRan;
//! Body used to create task in thread 0 and abuse it in thread 1.
struct AbuseOneTask {
- void operator()( const tbb::blocked_range<int>& r ) const {
+ void operator()( int ) const {
tbb::task_scheduler_init init;
// Thread 1 attempts to incorrectly use the task created by thread 0.
TRY_BAD_EXPR(AbusedTask->spawn(*AbusedTask),"owne");
@@ -94,26 +94,27 @@ struct AbuseOneTask {
//! Test various __TBB_ASSERT assertions related to class tbb::task.
void TestTaskAssertions() {
-#if TBB_DO_ASSERT
+#if TBB_USE_ASSERT
// Catch assertion failures
tbb::set_assertion_handler( AssertionFailureHandler );
tbb::task_scheduler_init init;
// Create task to be abused
AbusedTask = new( tbb::task::allocate_root() ) tbb::empty_task;
- NativeParallelFor( tbb::blocked_range<int>(0,1,1), AbuseOneTask() );
+ NativeParallelFor( 1, AbuseOneTask() );
ASSERT( AbuseOneTaskRan==1, NULL );
AbusedTask->destroy(*AbusedTask);
// Restore normal assertion handling
tbb::set_assertion_handler( NULL );
-#endif /* TBB_DO_ASSERT */
+#endif /* TBB_USE_ASSERT */
}
//------------------------------------------------------------------------
int main(int argc, char* argv[]) {
- srand(2);
- MinThread = 1;
- ParseCommandLine( argc, argv );
+#if __GLIBC__==2&&__GLIBC_MINOR__==3
+ printf("skip\n");
+#else
TestTaskAssertions();
printf("done\n");
+#endif
return 0;
}
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
index 01c039a..cd073c1 100644
--- a/src/test/test_task_leaks.cpp
+++ b/src/test/test_task_leaks.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -100,7 +100,15 @@ public:
};
#include "harness_memory.h"
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+ // VS2008/VC9 seems to have an issue
+ #pragma warning( push )
+ #pragma warning( disable: 4985 )
+#endif
#include <math.h>
+#if _MSC_VER==1500 && !defined(__INTEL_COMPILER)
+ #pragma warning( pop )
+#endif
void RunTaskGenerators( int i ) {
tbb::task* dummy_root;
@@ -115,7 +123,7 @@ void RunTaskGenerators( int i ) {
else
dummy_root->spawn( *new( dummy_root->allocate_child() ) ChangeProducer );
if( i==260 && !Producer ) {
- fprintf(stderr, "Warning: producer has not changed after 10 attempts; running on a single core?\n");
+ printf("Warning: producer has not changed after 10 attempts; running on a single core?\n");
}
for( int j=0; j<100; ++j ) {
tbb::task& t = *new( tbb::task::allocate_root() ) TaskGenerator(/*child_count=*/4, /*depth=*/6);
@@ -191,7 +199,6 @@ void TestTaskReclamation() {
//------------------------------------------------------------------------
int main(int argc, char* argv[]) {
- srand(2);
MinThread = -1;
ParseCommandLine( argc, argv );
if( !GetMemoryUsage() ) {
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
index 8648be8..ee1d061 100644
--- a/src/test/test_task_scheduler_init.cpp
+++ b/src/test/test_task_scheduler_init.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -28,6 +28,7 @@
#include "tbb/task_scheduler_init.h"
#include <cstdlib>
+#include "harness_assert.h"
//! Test that task::initialize and task::terminate work when doing nothing else.
/** maxthread is treated as the "maximum" number of worker threads. */
@@ -36,20 +37,26 @@ void InitializeAndTerminate( int maxthread ) {
switch( i&3 ) {
default: {
tbb::task_scheduler_init init( std::rand() % maxthread + 1 );
+ ASSERT(init.is_active(), NULL);
break;
}
case 0: {
tbb::task_scheduler_init init;
+ ASSERT(init.is_active(), NULL);
break;
}
case 1: {
tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
+ ASSERT(init.is_active(), NULL);
break;
}
case 2: {
tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+ ASSERT(!init.is_active(), "init should not be active; initialization was deferred");
init.initialize( std::rand() % maxthread + 1 );
+ ASSERT(init.is_active(), NULL);
init.terminate();
+ ASSERT(!init.is_active(), "init should not be active; it was terminated");
break;
}
}
@@ -59,7 +66,6 @@ void InitializeAndTerminate( int maxthread ) {
#include <cstdio>
#include <stdexcept>
#include "harness.h"
-#include "tbb/blocked_range.h"
#if _WIN64
namespace std { // 64-bit Windows compilers have not caught up with 1998 ISO C++ standard
@@ -69,7 +75,7 @@ namespace std { // 64-bit Windows compilers have not caught up with 1998 IS
#endif /* _WIN64 */
struct ThreadedInit {
- void operator()( const tbb::blocked_range<long>& r ) const {
+ void operator()( int ) const {
try {
InitializeAndTerminate(MaxThread);
} catch( std::runtime_error& error ) {
@@ -105,7 +111,7 @@ int main(int argc, char* argv[]) {
}
for( int p=MinThread; p<=MaxThread; ++p ) {
if( Verbose ) printf("testing with %d threads\n", p );
- NativeParallelFor( tbb::blocked_range<long>(0,p,1), ThreadedInit() );
+ NativeParallelFor( p, ThreadedInit() );
}
std::printf("done\n");
return 0;
diff --git a/src/test/test_task_scheduler_observer.cpp b/src/test/test_task_scheduler_observer.cpp
index 7a08d22..4b37582 100644
--- a/src/test/test_task_scheduler_observer.cpp
+++ b/src/test/test_task_scheduler_observer.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -119,17 +119,15 @@ void DoFib( FlagType flags ) {
}
#include "tbb/task_scheduler_init.h"
-#include "tbb/blocked_range.h"
#include "harness.h"
class DoTest {
int nthread;
public:
DoTest( int n ) : nthread(n) {}
- void operator()( tbb::blocked_range<int> r ) const {
+ void operator()( int i ) const {
TLS& tls = GetTLS();
tls.IsMaster = true;
- int i = r.begin();
if( i==0 ) {
tbb::task_scheduler_init(nthread);
DoFib(0);
@@ -143,7 +141,7 @@ public:
};
void TestObserver( int p, int q ) {
- NativeParallelFor( tbb::blocked_range<int>(0,p,1), DoTest(q) );
+ NativeParallelFor( p, DoTest(q) );
}
int main(int argc, char* argv[]) {
diff --git a/src/test/test_tbb_thread.cpp b/src/test/test_tbb_thread.cpp
index 99f7fca..25cd8e2 100644
--- a/src/test/test_tbb_thread.cpp
+++ b/src/test/test_tbb_thread.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -242,6 +242,16 @@ void RunTests() {
CheckRelations(uniq_ids, THRDS, false);
+ for (int i=0; i<2; i++) {
+ AnotherThreadFunc empty_func;
+ tbb::tbb_thread thr_to(empty_func), thr_from(empty_func);
+ tbb::tbb_thread::id from_id = thr_from.get_id();
+ if (i) thr_to.join();
+ thr_to = thr_from;
+ ASSERT( thr_from.get_id() == tbb::tbb_thread::id(), NULL );
+ ASSERT( thr_to.get_id() == from_id, NULL );
+ }
+
ASSERT( tbb::tbb_thread::hardware_concurrency() > 0, NULL);
}
diff --git a/src/test/test_tbb_version.cpp b/src/test/test_tbb_version.cpp
index 3cf3868..e465129 100644
--- a/src/test/test_tbb_version.cpp
+++ b/src/test/test_tbb_version.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -55,8 +55,15 @@ void initialize_strings_vector(std::vector <string_pair>* vector);
const char stderr_stream[] = "version_test.err";
const char stdout_stream[] = "version_test.out";
-int main(int argc, char **argv)
+int main(int argc, char*[] )
{
+#if TBB_INTERFACE_VERSION>=3014 /* where we first introduced runtime version identification */
+ // For now, just test that run-time TBB version matches the compile-time version,
+ // since otherwise the subsequent test of "TBB: INTERFACE VERSION" string will fail anyway.
+ // We need something more clever in future.
+ ASSERT(tbb::TBB_runtime_interface_version()==TBB_INTERFACE_VERSION,
+ "Running with the library of different version than the test was compiled against");
+#endif
try{
FILE *stream_out;
FILE *stream_err;
@@ -65,12 +72,12 @@ int main(int argc, char **argv)
if(argc>1) {
stream_err = freopen( stderr_stream, "w", stderr );
if( stream_err == NULL ){
- fprintf( stderr, "Internal test error (freopen)\n" );
+ printf( "Internal test error (freopen)\n" );
exit( 1 );
}
stream_out = freopen( stdout_stream, "w", stdout );
if( stream_out == NULL ){
- fprintf( stderr, "Internal test error (freopen)\n" );
+ printf( "Internal test error (freopen)\n" );
exit( 1 );
}
{
@@ -85,30 +92,30 @@ int main(int argc, char **argv)
printf( "TBB_VERSION defined, skipping step 1 (empty output check)\n" );
}else{
if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){
- fprintf( stderr, "Error (step 1): Internal test error\n" );
+ printf( "Error (step 1): Internal test error\n" );
exit( 1 );
}
//Checking output streams - they should be empty
stream_err = fopen( stderr_stream, "r" );
if( stream_err == NULL ){
- fprintf( stderr, "Error (step 1):Internal test error (stderr open)\n" );
+ printf( "Error (step 1):Internal test error (stderr open)\n" );
exit( 1 );
}
while( !feof( stream_err ) ) {
if( fgets( psBuffer, 512, stream_err ) != NULL ){
- fprintf( stderr, "Error (step 1): stderr should be empty\n" );
+ printf( "Error (step 1): stderr should be empty\n" );
exit( 1 );
}
}
fclose( stream_err );
stream_out = fopen( stdout_stream, "r" );
if( stream_out == NULL ){
- fprintf( stderr, "Error (step 1):Internal test error (stdout open)\n" );
+ printf( "Error (step 1):Internal test error (stdout open)\n" );
exit( 1 );
}
while( !feof( stream_out ) ) {
if( fgets( psBuffer, 512, stream_out ) != NULL ){
- fprintf( stderr, "Error (step 1): stdout should be empty\n" );
+ printf( "Error (step 1): stdout should be empty\n" );
exit( 1 );
}
}
@@ -121,7 +128,7 @@ int main(int argc, char **argv)
}
if( ( system(TEST_SYSTEM_COMMAND) ) != 0 ){
- fprintf( stderr, "Error (step 2):Internal test error\n" );
+ printf( "Error (step 2):Internal test error\n" );
exit( 1 );
}
//Checking pipe - it should contain version data
@@ -133,12 +140,12 @@ int main(int argc, char **argv)
stream_out = fopen( stdout_stream, "r" );
if( stream_out == NULL ){
- fprintf( stderr, "Error (step 2):Internal test error (stdout open)\n" );
+ printf( "Error (step 2):Internal test error (stdout open)\n" );
exit( 1 );
}
while( !feof( stream_out ) ) {
if( fgets( psBuffer, 512, stream_out ) != NULL ){
- fprintf( stderr, "Error (step 2): stdout should be empty\n" );
+ printf( "Error (step 2): stdout should be empty\n" );
exit( 1 );
}
}
@@ -146,7 +153,7 @@ int main(int argc, char **argv)
stream_err = fopen( stderr_stream, "r" );
if( stream_err == NULL ){
- fprintf( stderr, "Error (step 1):Internal test error (stderr open)\n" );
+ printf( "Error (step 1):Internal test error (stderr open)\n" );
exit( 1 );
}
@@ -156,14 +163,14 @@ int main(int argc, char **argv)
if( fgets( psBuffer, 512, stream_err ) != NULL ){
do{
if ( strings_iterator == strings_vector.end() ){
- fprintf( stderr, "Error: version string dictionary ended prematurely.\n" );
- fprintf( stderr, "No match for: \t%s", psBuffer );
+ printf( "Error: version string dictionary ended prematurely.\n" );
+ printf( "No match for: \t%s", psBuffer );
exit( 1 );
}
if ( strstr( psBuffer, strings_iterator->first.c_str() ) == NULL ){
if( strings_iterator->second == required ){
- fprintf( stderr, "Error: version strings do not match.\n" );
- fprintf( stderr, "Expected \"%s\" not found in:\n\t%s", strings_iterator->first.c_str(), psBuffer );
+ printf( "Error: version strings do not match.\n" );
+ printf( "Expected \"%s\" not found in:\n\t%s", strings_iterator->first.c_str(), psBuffer );
exit( 1 );
}else{
//Do we need to print in case there is no non-required string?
@@ -189,25 +196,22 @@ int main(int argc, char **argv)
void initialize_strings_vector(std::vector <string_pair>* vector)
{
vector->push_back(string_pair("TBB: VERSION\t\t2.1", required)); // check TBB_VERSION
- vector->push_back(string_pair("TBB: INTERFACE VERSION\t3011", required)); // check TBB_INTERFACE_VERSION
+ vector->push_back(string_pair("TBB: INTERFACE VERSION\t3015", required)); // check TBB_INTERFACE_VERSION
vector->push_back(string_pair("TBB: BUILD_DATE", required));
vector->push_back(string_pair("TBB: BUILD_HOST", required));
-#if _WIN32||_WIN64
vector->push_back(string_pair("TBB: BUILD_OS", required));
+#if _WIN32||_WIN64
vector->push_back(string_pair("TBB: BUILD_CL", required));
vector->push_back(string_pair("TBB: BUILD_COMPILER", required));
#elif __APPLE__
vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
vector->push_back(string_pair("TBB: BUILD_GCC", required));
vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
- vector->push_back(string_pair("TBB: BUILD_LD", required));
#elif __sun
- vector->push_back(string_pair("TBB: BUILD_OS", required));
vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
vector->push_back(string_pair("TBB: BUILD_SUNCC", required));
vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
#else //We use version_info_linux.sh for unsupported OSes
- vector->push_back(string_pair("TBB: BUILD_OS", required));
vector->push_back(string_pair("TBB: BUILD_KERNEL", required));
vector->push_back(string_pair("TBB: BUILD_GCC", required));
vector->push_back(string_pair("TBB: BUILD_COMPILER", not_required)); //if( getenv("COMPILER_VERSION") )
@@ -216,7 +220,8 @@ void initialize_strings_vector(std::vector <string_pair>* vector)
#endif
vector->push_back(string_pair("TBB: BUILD_TARGET", required));
vector->push_back(string_pair("TBB: BUILD_COMMAND", required));
- vector->push_back(string_pair("TBB: TBB_DO_ASSERT", required));
+ vector->push_back(string_pair("TBB: TBB_USE_DEBUG", required));
+ vector->push_back(string_pair("TBB: TBB_USE_ASSERT", required));
vector->push_back(string_pair("TBB: DO_ITT_NOTIFY", required));
vector->push_back(string_pair("TBB: ITT", not_required)); //#ifdef DO_ITT_NOTIFY
vector->push_back(string_pair("TBB: ALLOCATOR", required));
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
index 8020342..2401a03 100644
--- a/src/test/test_tick_count.cpp
+++ b/src/test/test_tick_count.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -93,7 +93,7 @@ void TestSimpleDelay( int ntrial, double duration, double tolerance ) {
if( delta<0 )
printf("ERROR: delta=%g < 0\n",delta);
if( delta>tolerance )
- printf("%s: delta=%g > %g=tolerance where duration=%g\n",delta>3*tolerance?"ERROR":"WARNING",delta,tolerance,duration);
+ printf("%s: delta=%g > %g=tolerance where duration=%g\n",delta>3*tolerance?"ERROR":"Warning",delta,tolerance,duration);
}
//------------------------------------------------------------------------
@@ -101,16 +101,13 @@ void TestSimpleDelay( int ntrial, double duration, double tolerance ) {
//------------------------------------------------------------------------
#include "tbb/atomic.h"
-#include "tbb/blocked_range.h"
const int MAX_NTHREAD = 1000;
static tbb::atomic<int> Counter;
static volatile bool Flag;
static tbb::tick_count tick_countArray[MAX_NTHREAD];
struct tick_countDifferenceBody {
- void operator()( const tbb::blocked_range<int>& range ) const {
- ASSERT( range.begin()+1==range.end(), "grainsize must be 1" );
- int id = range.begin();
+ void operator()( int id ) const {
if( --Counter==0 ) Flag = true;
while( !Flag ) continue;
tick_countArray[id] = tbb::tick_count::now();
@@ -123,7 +120,7 @@ void Testtick_countDifference( int n ) {
for( int trial=0; trial<10; ++trial ) {
Counter = n;
Flag = false;
- NativeParallelFor( tbb::blocked_range<int>(0,n,1), tick_countDifferenceBody() );
+ NativeParallelFor( n, tick_countDifferenceBody() );
ASSERT( Counter==0, NULL );
for( int i=0; i<n; ++i )
for( int j=0; j<i; ++j ) {
@@ -131,7 +128,7 @@ void Testtick_countDifference( int n ) {
if( diff<0 ) diff = -diff;
if( diff>tolerance ) {
printf("%s: cross-thread tick_count difference = %g > %g = tolerance\n",
- diff>3*tolerance?"ERROR":"WARNING",diff,tolerance);
+ diff>3*tolerance?"ERROR":"Warning",diff,tolerance);
}
}
}
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
index 866fc29..35c33e1 100644
--- a/src/test/test_yield.cpp
+++ b/src/test/test_yield.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2005-2008 Intel Corporation. All Rights Reserved.
+ Copyright 2005-2009 Intel Corporation. All Rights Reserved.
This file is part of Threading Building Blocks.
@@ -30,19 +30,17 @@
// On Red Hat EL4 U1, it does not work, because sched_yield is broken.
#include "tbb/tbb_machine.h"
-#include "harness.h"
-#include "tbb/blocked_range.h"
#include "tbb/tick_count.h"
+#include "harness.h"
static volatile long CyclicCounter;
static volatile bool Quit;
double SingleThreadTime;
-struct RoundRobin {
+struct RoundRobin: NoAssign {
const int number_of_threads;
RoundRobin( long p ) : number_of_threads(p) {}
- void operator()( const tbb::blocked_range<long>& r ) const {
- const long k = r.begin();
+ void operator()( long k ) const {
tbb::tick_count t0 = tbb::tick_count::now();
for( long i=0; i<10000; ++i ) {
// Wait for previous thread to notify us
@@ -71,7 +69,7 @@ int main( int argc, char* argv[] ) {
if( Verbose ) printf("testing with %d threads\n", p );
CyclicCounter = 0;
Quit = false;
- NativeParallelFor( tbb::blocked_range<long>(0,p,1), RoundRobin(p) );
+ NativeParallelFor( long(p), RoundRobin(p) );
}
printf("done\n");
return 0;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/tbb.git
More information about the debian-science-commits
mailing list