[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), &copy_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), &copy_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, &copy_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, &copy_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, &copy_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 &comp;
-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), &copy_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), &copy_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, &copy_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, &copy_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, &copy_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 &comp;
+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 &comp;
+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&#x0D;&#x0A;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&#x0D;&#x0A;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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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&#x0D;&#x0A;for /L %%a in (1,1,500) do type ..\index.html >> input.txt"
+				CommandLine="$(OutDir)\gen_input >input.txt&#x0D;&#x0A;"
+				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